文档章节

Protobuffer | PHP安装Google protobuf及使用

云迹
 云迹
发布于 2017/02/05 00:30
字数 597
阅读 2630
收藏 1

【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>

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的值

© 著作权归作者所有

云迹
粉丝 7
博文 61
码字总数 7250
作品 0
成都
程序员
私信 提问
php安装 protobuf2.6.1扩展

首次实际项目中用到protobuf,找了下资料,弄了下环境并跑通,做下记录以免忘记 由于对接方使用的是proto2.4版本,所以也只能使用版本2的了。注意下,大版本间似乎是不支持的,我们试过安装版...

goodman_fz
2018/12/26
582
0
我的Protobuf消息设计原则(续)--实践

1.首先为 聊天服务器(Chat)定义google protobuf的协议接口文件 接口主要遵循 Request、Response、Notification(Indication),Command(本文未出现)四大消息分类,并且使用Message顶层消...

newzai
2014/07/19
10.4K
19
Centos6.4下安装protobuf及简单使用

1、protobuf是google公司提出的数据存储格式,详细介绍可以参考:https://code.google.com/p/protobuf/ 2、下载最新的protobuf,下载地址:https://code.google.com/p/protobuf/downloads/li...

天下杰论
2015/05/09
4.5K
0
Grpc介绍 — ProToBuf基本使用

RPC(Remote Procedure Call)远程过程调用,关注笔者的同学应该知道之前笔者出过关于Thrift对应的问题,这次主要来说的是Google开源的Grpc,和Thrift有很大的区别Grpc是基于HTTP2.0并且依赖...

喵了_个咪
02/28
231
0
Google Protocol Buffers 学习笔记

Google Protocol Buffers 学习 Protocol Buffers(PB)是一个用于序列化结构化数据的机制,是谷歌的一个开源项目,在github上有源代码,也有发行版。PB跟XML相似,XML序列化的时候速度是可以...

yejq8
2015/05/17
444
0

没有更多内容

加载失败,请刷新页面

加载更多

003-ES集群

ES 集群 详情: https://my.oschina.net/u/3635512/blog/3140294 将实验机器/etc/elasticsearch/elasticsearch.yml 中配置文件改为 cluster.name: myes   #ES集群名称node.name:......

伟大源于勇敢的开始
24分钟前
6
0
法国电力项目二期正式验收

2019年12月10日, 法国电力项目二期正式验收 并就未来的合作技术方向进行了探讨: 去中心化数据存储/搜索引擎 可信计算/零知识证明 能源虚拟机改造 出席的人有: 法国电力总部 CIO&CTO Step...

怎当她临去时秋波那一转
39分钟前
3
0
谷歌助手

参照: https://www.mxblog.com.cn/mac%E7%89%88chrome%E6%B5%8F%E8%A7%88%E5%99%A8%E5%AE%89%E8%A3%85%E8%B0%B7%E6%AD%8C%E8%AE%BF%E9%97%AE%E5%8A%A9%E6%89%8B.html......

T型人才追梦者
48分钟前
6
0
索引延迟关联

前言 今天在看代码的时候学习到了一种索引的优化,就先在此记录下来。 具体 举个例子,原sql如下: SELECT * FROM TABLE WHERE INDEX = '' LIMIT 10000, 10; 现象 就算INDEX用了查询索引,...

无敌小杰杰
今天
6
0
tomcat_jdk安装,安装zrlog,nginx代理tomcat,第二个java应用

tomcat_jdk安装 要跑tomcat 首先要安装 jdk jdk 有两个版本 一个是 open jdk,一个是 oracle jdk open jdk 是 oracle jdk 的开源版本 两个版本都可以使用 这次实验先使用 open jdk 来做 如果...

doomcat
今天
11
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部