媒介
RPC是谷歌公司主导的一款RPC框架,并应用protobuf作为数据传输格局,随同gRPC框架的成熟及应用人群的添加,关于底层应用的数据格局protobuf也被愈来愈遭到注重,而关于PHP生态而言,相干ProtoBuf引见文档及应用材料比拟少,故此写简文心愿能协助到一些有需求的同窗。
ProtoBuf (Google Protocol Buffer)是由谷歌公司用于数据替换的序列构造化数据格局,具备跨平台、跨言语、可扩大特点,类型于罕用的XML及JSON,但具备更小的传输体积、更高的编码、解码才能,特地适宜于数据存储、网络数据传输等对存储体积、及时性要求高的畛域。
今朝民间ProtoBuf 最新版本ProtoBuf3,曾经支持多种言语:C++\C#\Go\Java\Python\Ruby\Object C \Javascript\PHP,而且提供对象很不便地依据没有同言语孕育发生ProtoBuf需求的类库。
上面将经过Person数据格局作为示例进行形容假如正在PHP环境中若何应用ProtoBuf3。
1、界说一个音讯类型
创立一个对于Person的界说文件(以.proto为后缀),如示例为person.proto,文件内容以下:
syntax="proto3"; package test; message Person{ string name=1;//姓名 int32 age=2;//春秋 bool sex=3;//性别 }
一、syntax="proto3":标明应用的是proto3格局,假如没有指定章为proto2
二、package test:界说包名为test,天生类时,会孕育发生一个目次为test
三、message Person:音讯主体内容,外面为各个字段的界说
2、天生对应的PHP类
界说好Person的格局后,该格局假如没有天生咱们所需求的类库,实际上是无任何意思的,还谷歌提供一个对象protoc天生咱们要的类库。
一、装置protoc
装置地点:protobuf-php-3.5.1.tar.gz,今朝最新为3.5.1
民间公布地点:https://github.com/谷歌/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
二、天生类库
/opt/soft/protobuf/bin/protoc --php_out=./ person.proto
天生后将正在以后目次孕育发生以下文件:
GPBMetadata/Person.php
Test/Person.php
3、正在PHP中应用ProtoBuf
正在PHP中应用ProtoBuf依赖一个protobuf的扩大,今朝提供两种形式进利用用,1:php的c扩大,2:php的lib扩大包,这二者都可正在方才下载包里能够找到。
另外,也能够应用composer进行装置该依赖扩大:composer require 谷歌/protobuf
这里我次要是应用composer装置,应该它能够帮我孕育发生autoload
装置好依赖后,咱们就能够开端正在php环境下应用protobuf了
一、序列化
<?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);
二、反序列化
<?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罕用的应用办法:
序列化:
一、serializeToString:序列化成二进制字符串
二、serializeToJsonString:序列化成JSON字符串
反序列化:
一、mergeFromString:二进制字符串反序列化
二、mergeFromJsonString:Json字符串反序列化
.proto的message解析
一、界说:
类型 变量名=地位;
如:int32 age=1;
这里需求区别,变量名前面的数字意思为该变量内容正在二进制序列中的地位而没有是变量的值,该数字必需是惟一不成反复应用。
二、今朝支持的类型:
double,float,int32,int64,uint32 ,uint64,sint32,sint64
fixed32,fixed64,sfixed32,sfixed64,bool,bytes
保举教程:《PHP》
以上就是PHP环境中应用ProtoBuf数据格局的具体内容,更多请存眷资源魔其它相干文章!
标签: php 使用 php开发教程 php开发资料 php开发自学 PHP环境 ProtoBuf 数据格式
抱歉,评论功能暂时关闭!