ProtoBuf數(shù)據(jù)格式怎么在PHP環(huán)境中使用?很多新手對(duì)此不是很清楚,為了幫助大家解決這個(gè)難題,下面小編將為大家詳細(xì)講解,有這方面需求的人可以來(lái)學(xué)習(xí)下,希望你能有所收獲。
一、定義一個(gè)消息類(lèi)型
創(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,生成類(lèi)時(shí),會(huì)產(chǎn)生一個(gè)目錄為test
3、message Person:消息主體內(nèi)容,里面為各個(gè)字段的定義
二、生成對(duì)應(yīng)的PHP類(lèi)
定義好Person的格式后,該格式如果不生成我們所需要的類(lèi)庫(kù),其實(shí)是無(wú)任何意義的,還google提供一個(gè)工具protoc生成我們要的類(lèi)庫(kù)。
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、生成類(lèi)庫(kù)
/opt/soft/protobuf/bin/protoc --php_out=./ person.proto
生成后將在當(dāng)前目錄產(chǎn)生如下文件:
GPBMetadata/Person.php
Test/Person.php
三、在PHP中使用ProtoBuf
在PHP中使用ProtoBuf依賴(lài)一個(gè)protobuf的擴(kuò)展,目前提供兩種方式進(jìn)行使用,1:php的c擴(kuò)展,2:php的lib擴(kuò)展包,這兩者均可在剛才下載包里可以找到。
另外,也可以使用composer進(jìn)行安裝該依賴(lài)擴(kuò)展:composer require google/protobuf
這里我主要是使用composer安裝,應(yīng)該它可以幫我產(chǎn)生autoload
安裝好依賴(lài)后,我們就可以開(kāi)始在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、定義:
類(lèi)型 變量名=位置;
如:int32 age=1;
這里需要區(qū)分,變量名后面的數(shù)字意義為該變量?jī)?nèi)容在二進(jìn)制序列中的位置而不是變量的值,該數(shù)字必須是不可重復(fù)使用。
2、目前支持的類(lèi)型:
double,float,int32,int64,uint32 ,uint64,sint32,sint64
fixed32,fixed64,sfixed32,sfixed64,bool,bytes
1、序列號(hào)+反序列號(hào)時(shí)間:
image.png
2、存儲(chǔ)大小:
image.pn
看完上述內(nèi)容是否對(duì)您有幫助呢?如果還想對(duì)相關(guān)知識(shí)有進(jìn)一步的了解或閱讀更多相關(guān)文章,請(qǐng)關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝您對(duì)創(chuàng)新互聯(lián)網(wǎng)站建設(shè)公司,的支持。
當(dāng)前題目:ProtoBuf數(shù)據(jù)格式怎么在PHP環(huán)境中使用-創(chuàng)新互聯(lián)
網(wǎng)頁(yè)鏈接:http://vcdvsql.cn/article32/eispc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站設(shè)計(jì)、建站公司、關(guān)鍵詞優(yōu)化、網(wǎng)頁(yè)設(shè)計(jì)公司、網(wǎng)站建設(shè)、品牌網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容