百分百源码网-让建站变得如此简单! 登录 注册 签到领金币!

主页 | 如何升级VIP | TAG标签

当前位置: 主页>网站教程>网页制作> PHP环境中运用ProtoBuf数据格局
分享文章到:

PHP环境中运用ProtoBuf数据格局

发布时间:09/01 来源:未知 浏览: 关键词:

前言

??RPC是google公司主导的一款RPC框架,并使用protobuf作为数据传输格局,陪伴gRPC框架的成熟及使用人群的增添,关于底层使用的数据格局protobuf也被越来越受到重视,而关于PHP生态而言,相关ProtoBuf介绍文档及使用材料比力少,故此写简文但愿能帮忙到一些有需要的同学。

??ProtoBuf (Google Protocol Buffer)是由google公司用于数据交流的序列构造化数据格局,具有跨平台、跨说话、可扩展特性,类型于常用的XML及JSON,但具有更小的传输体积、更高的编码、解码能力,特殊适合于数据储备、网络数据传输等对储备体积、实时性要求高的领域。

??当前官方ProtoBuf 最新版本ProtoBuf3,已经支撑多种说话:C++\C#\Go\Java\Python\Ruby\Object C \Javascript\PHP,并且供给工具很利便地按照不一样说话发生ProtoBuf需要的类库。

??下面将通过Person数据格局作为示例停止描写假如在PHP环境中怎样使用ProtoBuf3。

一、定义一个新闻类型

创立一个关于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、序列化


<?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:序列化成二进制字符串

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

引荐教程:《PHP》


以上就是PHP环境中使用ProtoBuf数据格局的具体内容,更多请关注百分百源码网其它相关文章!

打赏

打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

百分百源码网 建议打赏1~10元,土豪随意,感谢您的阅读!

共有152人阅读,期待你的评论!发表评论
昵称: 网址: 验证码: 点击我更换图片
最新评论

本文标签

广告赞助

能出一分力是一分吧!

订阅获得更多模板

本文标签

广告赞助

订阅获得更多模板