如何在 PHP 中处理 Protocol Buffers 数据

Protocol Buffers是谷歌定义的一种跨语言、跨平台、可扩展的数据传输及存储的协议,因为将字段协议分别放在传输两端,传输数据中只包含数据本身,不需要包含字段说明,所以传输数据量小,解析效率高。感兴趣的可以访问这里。Protocol Buffers官方只支持C++, Java, Python, C#, Go,如果想在PHP中使用Protocol Buffers,需要借助于第三方的扩展,使用方法如下。

安装protoc编译器

第一步,安装Google的protoc编译器,这个工具可以把proto文件中定义的Message转换为各种编程语言中的类。下载release版本直接编译安装。

下载地址

安装PHP Plugin

第二步,安装protoc的PHP plugin,需要使用composer安装,感兴趣的可以访问http://www.phpcomposer.com

这个插件可以将proto文件转换到PHP文件,在PHP应用中引用后,可以将二进制格式的Protocol Buffers数据转换为PHP的对象

下载地址

安装php-protocolbuffers

第三步,安装php-protocolbuffers,这是一个PHP扩展,在第二步中已经完成了proto文件到PHP文件的转换,但是对PHP对象的各种操作还需要这个扩展中的API方法

然后在你的php.ini配置文件中添加

下载地址

编写代码

第四步,借助上面提到的扩展的各种API方法,可以简单地get出自己需要的字段完成后续工作

1 收藏 3 评论

相关文章

可能感兴趣的话题



直接登录
最新评论
  • 武大胆 写代码的人 2016/05/13

    Protocol Buffers只能算是一个序列化库,怎么成协议了

  • it男那点事 php 2016/05/14

    一般都用json直接传递

  • 麦田听雨声   04/25

    您好,请问您知道如何遍历查询一个protobuf消息中所有的字段吗?
    我知道一种方法就是首先取到field_count,然后通过FindFieldByNumber(),来循环读取所有的字段,但是现在有一种情况,就是protobuf定义时,字段号是不连续的,比如下面这种,
    message MyPb
    {
    uint32 id =1;
    uint32 score =2;
    string name =5;
    uint32 high =6;
    }
    像上面这种定义,取到的field_count应该是4,那么我遍历时调用FindFieldByNumber(1)~FindFieldByNumber(4),能取到字段号为5的name以及为6的high吗?或者我的理解有问题,取得时候通过FindFieldByNumber(1)~FindFieldByNumber(4)便可以取到所有的字段。
    谢谢。

跳到底部
返回顶部