ProtoBuf数据格式怎么在PHP环境中使用-创新互联

ProtoBuf数据格式怎么在PHP环境中使用?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

坚守“ 做人真诚 · 做事靠谱 · 口碑至上 · 高效敬业 ”的价值观,专业网站建设服务10余年为成都成都广告设计小微创业公司专业提供成都定制网站营销网站建设商城网站建设手机网站建设小程序网站建设网站改版,从内容策划、视觉设计、底层架构、网页布局、功能开发迭代于一体的高端网站建设服务。

一、定义一个消息类型


创建一个关于Person的定义文件(以.proto为后缀),如示例为person.proto,文件内容如下:

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

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


2、package test:定义包名为test,生成类时,会产生一个目录为test


3、message Person:消息主体内容,里面为各个字段的定义

二、生成对应的PHP类


定义好Person的格式后,该格式如果不生成我们所需要的类库,其实是无任何意义的,还google提供一个工具protoc生成我们要的类库。

1、安装protoc


安装地址:protobuf-php-3.5.1.tar.gz,目前新为3.5.1


官方发布地址: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


生成后将在当前目录产生如下文件:


GPBMetadata/Person.php


Test/Person.php

三、在PHP中使用ProtoBuf


在PHP中使用ProtoBuf依赖一个protobuf的扩展,目前提供两种方式进行使用,1:php的c扩展,2:php的lib扩展包,这两者均可在刚才下载包里可以找到。


另外,也可以使用composer进行安装该依赖扩展:composer require google/protobuf


这里我主要是使用composer安装,应该它可以帮我产生autoload


安装好依赖后,我们就可以开始在php环境下使用protobuf了


1、序列化

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


2、反序列化

mergeFromString($bindata);
echo $person->getName();

可以正常地输出lailaiji

PHP常用的使用方法:


序列化:


1、serializeToString:序列化成二进制字符串


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


反序列化:


1、mergeFromString:二进制字符串反序列化


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

.proto的message解析


1、定义:


类型 变量名=位置;


如:int32 age=1;


这里需要区分,变量名后面的数字意义为该变量内容在二进制序列中的位置而不是变量的值,该数字必须是不可重复使用。


2、目前支持的类型:


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


fixed32,fixed64,sfixed32,sfixed64,bool,bytes

1、序列号+反序列号时间:


image.png

2、存储大小:


image.pn

看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注创新互联行业资讯频道,感谢您对创新互联网站建设公司,的支持。


文章名称:ProtoBuf数据格式怎么在PHP环境中使用-创新互联
浏览地址:http://azwzsj.com/article/eispc.html