think php3 中接入protobuf(一)

protobuf,网上一大堆解释,说白了,就是跟json,xml一样的通讯协议,相比json,xml具有体积小,解析速度快的优点,我实在本地的电脑上实现的,后续会有相应的项目使用到,所以先在本地实现,以免到时候慌乱。

本地配置,w7,php环境是WampServer。

首先,要在本地搭建Protocol Buffers环境,这其中有很多版本,我使用的3.9.0,下载链接:https://github.com/protocolbuffers/protobuf/releases/tag/v3.9.0,由于是在本地Windows系统上,下载64版本,其次是设置环境变量,我直接将解压的bin下的exe文件放到了C盘中的Windows\System32下,cmd验证一下,protoc --version,显示版本号就成功了,

 

 

成功后了解一下Protocol Buffers的机制,

protobuf将一种结构称为一个message类型,我们以电话簿中的数据为例。

message Person {
  required string name = 1;
  required int32 id = 2; [default = 0]
  optional string email = 3;

  repeated int32 samples = 4 [packed=true];

}

其中Person是message这种结构的名称,name、id、email是其中的Field,每个Field保存着一种数据类型,后面的1、2、3是Filed对应的数字id。id在115之间编码只需要占一个字节,包括Filed数据类型和Filed对应数字id,在162047之间编码需要占两个字节,所以最常用的数据对应id要尽量小一些。后面具体讲到编码规则时会细讲。

Field最前面的required,optional,repeated是这个Filed的规则,分别表示该数据结构中这个Filed有且只有1个,可以是0个或1个,可以是0个或任意个。optional后面可以加default默认值,如果不加,数据类型的默认为0,字符串类型的默认为空串。repeated后面加[packed=true]会使用新的更高效的编码方式。

注意:使用required规则的时候要谨慎,因为以后结构若发生更改,这个Filed若被删除的话将可能导致兼容性的问题。



作者:gaussfan
链接:https://www.jianshu.com/p/419efe983cb2
来源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。
 
 
大体明白了,开始吧,建一个文本文档,根据自己需要的数据结构编写,编写完毕后改后缀名为proto,编写完毕后就相当于有个一个模板,不管后台发送数据还是前台得到数据解析,都需要根据模板来进行,有了模板,还需要将模板转换为各种语言能够使用的类型,php就需要转换为后缀为.php的,java就需要转化为后缀是.java的,这就用到了上面我们安装的工具,cmd命令行中,进入到Mail.proto相同目录中,运行:protoc --php_out=. mail.proto,

 

其中的--php_out,就是生成php需要的文件,需要什么文件就是用相应的命令,执行成功,就有了以下两个文件夹,根据模板的数据结构不同,可能生成的文件不同。

有了需要的文件,我们就可以在PHP中使用了,使用前,还需要在PHP中安装扩展,在 require中填写我们的google/protobuf+版本号,前提是你安装了Composer ,安装教程https://www.runoob.com/w3cnote/composer-install-and-usage.html,

安装完毕,填写好后,到项目composer.json同级目录,执行,composer install安装,其中可能由于修改composer.json出现报错啥的, 错误信息: https://blog.csdn.net/will5451/article/details/51484175,一般都有。

执行完毕后,出现就算成功了。这样我们就在think php中使用了Protocol Buffers,最后一步,使用它。

直接将文件夹放到了indexController同级目录,接着网上就有一大堆教程, 其中 serializeToString字面就是就是序列化成字符串,mergeFromString这个就是将字符串数据解析。至此大体结束,

本人也是php刚入坑,写的不规范之处,不对之处,包涵。

 

 

 

posted @ 2019-08-12 17:41  头一回  阅读(375)  评论(0编辑  收藏  举报