Protobuffer | PHP安装Google protobuf及使用

PHP安装Google protobuf及使用

备注

  1. 项目采用redis集群(主从方式)存储数据;数据量月增50W,单个数据序列化情况下达到2k,继续压缩数据解决空间.
  2. 项目服务采用PHP(版本5.3)作为RPC服务版本.
  3. protobuf的相关说明和指南请参考google proto buffers开发者指南

准备

安装protoc编译器
  1. 下载适合PHP 5.3版本的protobuf 2.5.0版本,下载地址
  2. 解压并安装

    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扩展
  1. 通过pecl扩展安装,扩展地址

    pecl install channel://pecl.php.net/protocolbuffers-0.2.6

  2. 通过源码编译, 下载地址

    tar -xvzf protocolbuffers-0.2.6.tar.gz

    cd protocolbuffers-0.2.6

    phpize

    ./configure

    make && make install

  3. 经过1或者2, 然后在你的php.ini配置文件中添加 : extension = "protocolbuffers.so"

  4. 获取ini位置和判断扩展是否安装成功,命令行执行如下命令 : 

    php -i | grep php.ini

    php -m | grep protocolbuffers

安装protoc plugin
  1. 按照protoc-gen-php的说明,用composer安装完成.

验证

  1. 通过composer安装过后,protoc-gen-php在 ~/.composer/vendor下面.

  2. 在~/.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/
  3. 生成对应的protobuf压缩相关操作的PHP文件.

    运行命令:
    path_to_protobuf_installed/bin/protoc --plugin=vendor/bin/protoc-gen-php --php_out=path_to_project/Vendor demo.proto
    生成文件及对应目录
  4. 进行简单的相关操作

    新建文件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的值

转载于:https://my.oschina.net/3233123/blog/831864

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值