PHP安装Google protobuf及使用
备注
- 项目采用redis集群(主从方式)存储数据;数据量月增50W,单个数据序列化情况下达到2k,继续压缩数据解决空间.
- 项目服务采用PHP(版本5.3)作为RPC服务版本.
- protobuf的相关说明和指南请参考google proto buffers开发者指南
准备
安装protoc编译器
- 下载适合PHP 5.3版本的protobuf 2.5.0版本,下载地址
-
解压并安装
tar -xvzf protobuf-2.5.0.tar.gz
cd protobuf-2.5.0
./configure --prefix=指定安装路径
make && make install
我是安装在/usr/local/protobuf-2.5目录下的;
安装PHP protocolbuffers扩展
-
通过pecl扩展安装,扩展地址
pecl install channel://pecl.php.net/protocolbuffers-0.2.6
-
通过源码编译, 下载地址
tar -xvzf protocolbuffers-0.2.6.tar.gz
cd protocolbuffers-0.2.6
phpize
./configure
make && make install
-
经过1或者2, 然后在你的php.ini配置文件中添加 : extension = "protocolbuffers.so"
-
获取ini位置和判断扩展是否安装成功,命令行执行如下命令 :
php -i | grep php.ini
php -m | grep protocolbuffers
安装protoc plugin
- 按照protoc-gen-php的说明,用composer安装完成.
验证
-
通过composer安装过后,protoc-gen-php在 ~/.composer/vendor下面.
-
在~/.composer下创建demo.proto文件
cd ~/.composer
vim demo.proto
复制如下内容到文件中 :
syntax = "proto2"; package Proto.Demo; message DemoPart1 { required string name = 1; required int32 age = 2; required string amount = 3; } message DemoPart2 { required int32 id = 1; required string address = 2; }
说明:
syntax :指定语法 package :会生成对应的文件夹,并且以package的值生成namespace message :一个message会生成对应的一个文件,每个文件的名称就以message的名称生成, 其他相关参考 : https://developers.google.com/protocol-buffers/
-
生成对应的protobuf压缩相关操作的PHP文件.
运行命令: path_to_protobuf_installed/bin/protoc --plugin=vendor/bin/protoc-gen-php --php_out=path_to_project/Vendor demo.proto 生成文件及对应目录
-
进行简单的相关操作
新建文件demo.php,拷贝如下代码:
$protoData = ''; $age = 0; $part1 = null; $part1 = new \Proto\Demo\DemoPart1(); $part1->setName('Jack Jones'); $part1->setAge(20); $part1->setAmount('99.99'); $protoData = $part1->serializeToString(); // 运行得到压缩过后的字符串 $part1 = \Proto\Demo\DemoPart1::parseFromString($protoData); $age = $part1->getAge(); // 获取到$age的值
来源:oschina
链接:https://my.oschina.net/u/79771/blog/831864