最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

如何在PHP環(huán)境中使用ProtoBuf數(shù)據(jù)格式

 更新時(shí)間:2020年06月19日 11:53:31   作者:年少有為AAA  
這篇文章主要介紹了如何在PHP環(huán)境中使用ProtoBuf數(shù)據(jù)格式,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下

前言

  RPC是google公司主導(dǎo)的一款RPC框架,并使用protobuf作為數(shù)據(jù)傳輸格式,伴隨gRPC框架的成熟及使用人群的增加,對于底層使用的數(shù)據(jù)格式protobuf也被越來越受到重視,而對于PHP生態(tài)而言,相關(guān)ProtoBuf介紹文檔及使用資料比較少,故此寫簡文希望能幫助到一些有需要的同學(xué)。

  ProtoBuf (Google Protocol Buffer)是由google公司用于數(shù)據(jù)交換的序列結(jié)構(gòu)化數(shù)據(jù)格式,具有跨平臺、跨語言、可擴(kuò)展特性,類型于常用的XML及JSON,但具有更小的傳輸體積、更高的編碼、解碼能力,特別適合于數(shù)據(jù)存儲、網(wǎng)絡(luò)數(shù)據(jù)傳輸?shù)葘Υ鎯w積、實(shí)時(shí)性要求高的領(lǐng)域。

  目前官方ProtoBuf 最新版本ProtoBuf3,已經(jīng)支持多種語言:C++\C#\Go\Java\Python\Ruby\Object C \Javascript\PHP,并且提供工具很方便地根據(jù)不同語言產(chǎn)生ProtoBuf需要的類庫。

  下面將通過Person數(shù)據(jù)格式作為示例進(jìn)行描述如果在PHP環(huán)境中如何使用ProtoBuf3。

一、定義一個(gè)消息類型

創(chuàng)建一個(gè)關(guān)于Person的定義文件(以.proto為后綴),如示例為person.proto,文件內(nèi)容如下:

syntax="proto3";
package test;
message Person{
 string name=1;//姓名
 int32 age=2;//年齡
 bool sex=3;//性別
}

1、syntax="proto3":表明使用的是proto3格式,如果不指定則為proto2

2、package test:定義包名為test,生成類時(shí),會產(chǎn)生一個(gè)目錄為test

3、message Person:消息主體內(nèi)容,里面為各個(gè)字段的定義

二、生成對應(yīng)的PHP類

定義好Person的格式后,該格式如果不生成我們所需要的類庫,其實(shí)是無任何意義的,還google提供一個(gè)工具protoc生成我們要的類庫。

1、安裝protoc

安裝地址:protobuf-php-3.5.1.tar.gz,目前最新為3.5.1

官方發(fā)布地址:https://github.com/google/protobuf/releases/tag/v3.5.1

解壓并安裝:

tar -zxvf protobuf-php-3.5.1.tar.gz
cd protobuf-3.5.1
./configure --prefix=/opt/soft/protobuf
make
make install

2、生成類庫

/opt/soft/protobuf/bin/protoc --php_out=./ person.proto

生成后將在當(dāng)前目錄產(chǎn)生如下文件:

GPBMetadata/Person.php

Test/Person.php

三、在PHP中使用ProtoBuf

在PHP中使用ProtoBuf依賴一個(gè)protobuf的擴(kuò)展,目前提供兩種方式進(jìn)行使用,1:php的c擴(kuò)展,2:php的lib擴(kuò)展包,這兩者均可在剛才下載包里可以找到。

另外,也可以使用composer進(jìn)行安裝該依賴擴(kuò)展:composer require google/protobuf

這里我主要是使用composer安裝,應(yīng)該它可以幫我產(chǎn)生autoload

安裝好依賴后,我們就可以開始在php環(huán)境下使用protobuf了

1、序列化

<?php
include 'vendor/autoload.php';
include 'GPBMetadata/Person.php';
include 'Test/Person.php';

$person = new Test\Person();
$person->setName("lailaiji");
$person->setAge("28");
$person->setSex(true);
$data = $person->serializeToString();
file_put_contents('data.bin',$data);


2、反序列化

<?php
include 'vendor/autoload.php';
include 'GPBMetadata/Person.php';
include 'Test/Person.php';
$bindata = file_get_contents('./data.bin');
$person = new Test\Person();
$person->mergeFromString($bindata);
echo $person->getName();

可以正常地輸出lailaiji

PHP常用的使用方法:

序列化:

1、serializeToString:序列化成二進(jìn)制字符串

2、serializeToJsonString:序列化成JSON字符串

反序列化:

1、mergeFromString:二進(jìn)制字符串反序列化

2、mergeFromJsonString:Json字符串反序列化

.proto的message解析

1、定義:

類型 變量名=位置;

如:int32 age=1;

這里需要區(qū)分,變量名后面的數(shù)字意義為該變量內(nèi)容在二進(jìn)制序列中的位置而不是變量的值,該數(shù)字必須是唯一不可重復(fù)使用。

2、目前支持的類型:

double,float,int32,int64,uint32 ,uint64,sint32,sint64

fixed32,fixed64,sfixed32,sfixed64,bool,bytes

性能測試

https://github.com/eishay/jvm-serializers/wiki

1、序列號+反序列號時(shí)間:

image.png

2、存儲大?。?br />

image.pn

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • div li的多行多列 無刷新分頁示例代碼

    div li的多行多列 無刷新分頁示例代碼

    翻頁文件一次加載了全部的內(nèi)容,因而不是很適合大型的網(wǎng)站,而適用于數(shù)據(jù)比較少的情況,下面有個(gè)不錯(cuò)的示例,感興趣的朋友可以參考下
    2013-10-10
  • php下將多個(gè)數(shù)組合并成一個(gè)數(shù)組的方法與實(shí)例代碼

    php下將多個(gè)數(shù)組合并成一個(gè)數(shù)組的方法與實(shí)例代碼

    php下將多個(gè)數(shù)組合并成一個(gè)數(shù)組的方法與實(shí)例代碼,需要的朋友可以參考下。
    2011-02-02
  • PHP防止表單重復(fù)提交的幾種常用方法匯總

    PHP防止表單重復(fù)提交的幾種常用方法匯總

    這篇文章主要介紹了PHP防止表單重復(fù)提交的幾種常用方法匯總,在PHP項(xiàng)目開發(fā)中有不錯(cuò)的實(shí)用價(jià)值,需要的朋友可以參考下
    2014-08-08
  • Thinkphp6 配置并使用redis圖文詳解

    Thinkphp6 配置并使用redis圖文詳解

    這篇文章主要介紹了Thinkphp6 配置并使用redis的方法,結(jié)合實(shí)例形式詳細(xì)分析了Redis的安裝、配置以及thinkphp6操作Redis的基本技巧,需要的朋友可以參考下
    2023-06-06
  • phar繞過phar與HALT實(shí)現(xiàn)文件上傳功能

    phar繞過phar與HALT實(shí)現(xiàn)文件上傳功能

    這篇文章主要介紹了phar繞過phar與HALT實(shí)現(xiàn)文件上傳功能,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧
    2022-12-12
  • PHP實(shí)現(xiàn)抽獎(jiǎng)系統(tǒng)的示例代碼

    PHP實(shí)現(xiàn)抽獎(jiǎng)系統(tǒng)的示例代碼

    這篇文章主要為大家介紹了如何利用PHP實(shí)現(xiàn)三種不同的抽獎(jiǎng)算法:隨機(jī)抽獎(jiǎng)、概率抽獎(jiǎng)和內(nèi)定抽獎(jiǎng),文中的示例代碼講解詳細(xì),感興趣的可以了解一下
    2022-06-06
  • Nginx服務(wù)器上安裝并配置PHPMyAdmin的教程

    Nginx服務(wù)器上安裝并配置PHPMyAdmin的教程

    這篇文章主要介紹了Nginx服務(wù)器上安裝并配置PHPMyAdmin的教程,附帶一條PHPMyAdmin加載慢的解決方法:)需要的朋友可以參考下
    2015-08-08
  • 關(guān)于Iframe如何跨域訪問Cookie和Session的解決方法

    關(guān)于Iframe如何跨域訪問Cookie和Session的解決方法

    本篇文章小編將為大家介紹,關(guān)于Iframe如何跨域訪問Cookie和Session的解決方法,有需要的朋友可以參考一下
    2013-04-04
  • PHP中單引號與雙引號的區(qū)別分析

    PHP中單引號與雙引號的區(qū)別分析

    在PHP中,我們可以使用單引號或者雙引號來表示字符串。不過我們作為開發(fā)者,應(yīng)該了解其中的區(qū)別。單引號與雙引號對于定義字符一個(gè)是可以解析變量一個(gè)是會把變量直接輸出來,同時(shí)單引號與雙引號在字符處理上單引號要優(yōu)與雙引號
    2014-08-08
  • PHP中iconv函數(shù)知識匯總

    PHP中iconv函數(shù)知識匯總

    iconv函數(shù)庫能夠完成各種字符集間的轉(zhuǎn)換,是php編程中不可缺少的基礎(chǔ)函數(shù)庫。本文內(nèi)容是參考了網(wǎng)上的其他資源,然后結(jié)合自己的實(shí)踐,有需要的小伙伴可以參考下。
    2015-07-07

最新評論

奎屯市| 宝丰县| 永川市| 油尖旺区| 济宁市| 龙陵县| 两当县| 彭阳县| 镇康县| 安化县| 义乌市| 印江| 视频| 清水县| 陇南市| 西平县| 长子县| 永靖县| 固始县| 鄄城县| 恩施市| 山西省| 资中县| 凤城市| 阿尔山市| 阿荣旗| 芦山县| 四子王旗| 揭西县| 上栗县| 盘锦市| 望城县| 靖州| 昭苏县| 桐乡市| 且末县| 宜章县| 镇巴县| 盐山县| 淳安县| 中山市|