我们知道Protocol Buffers是Google定义的一种跨语言、跨平台、可扩展的数据传输及存储的协议,因为将字段协议分别放在传输两端,传输数据中只包含数据本身,不需要包含字段说明,所以传输数据量小,解析效率高。感兴趣的可以访问https://developers.google.com/protocol-buffers/docs/overview。Protocol Buffers官方只支持C++, Java, Python, C#, Go, PHP, 一般可以采用两种形式:

第一是composer安装php包的形式,第二种是安装PHP扩展的形式

1.安装protoc编译器:

https://github.com/google/protobuf/releases/ (注意选择版本)
cd protibuf-3.6.1
./configure
make && make install

查看版本:

/usr/local/bin/protoc --version
libprotoc 3.6.1

2.composer安装:

curl -sS https://getcomposer.org/installer | php
mv composer.phar /usr/local/bin/composer
composer --version

3.composer在项目中引入protobuf:

新建文件夹app,然后在app文件夹内新建composer.json文件,文件内容如下:

{
"require":{
"google/protobuf": "^3.6.1"
}
}

保存之后,在app文件夹下执行composer install安装命令:

composer install
ls (查看文件内容)
composer.json composer.lock vendor (表示安装成功)

4.编写、编译.proto文件:

syntax = "proto3";
package mail;
message MailConfig{
string to = 1;
string from = 2;
string msg = 3;
}

编译:

/usr/local/bin/protoc --php_out=. mail.proto

--php-out表示生成目标语言存放位置,

编写测试文件:

<?php
require_once('vendor/autoload.php');
require_once('GPBMetadata/Mail.php');
require_once('Mail/MailConfig.php');
/**
* Writer写数据,Protobuf抽象成调用相关set函数即可
*/
$foo = new \Mail\MailConfig();
$foo->setTo("George");
$foo->setFrom("John");
$foo->setMsg("Don't forget the meeting!");
$packed = $foo->serializeToString();//这里你也可以选择serializeToJsonString序列化成JSON
//Reader读数据,Protobuf抽象成调用相关get函数即可
$res = new \Mail\MailConfig();
$res->mergeFromString($packed);
$jsonArr = [
"to"=> $res->getTo(),
"from"=> $res->getFrom(),
"msg"=> $res->getMsg(),
];
var_dump($jsonArr);

最终输出:

array(3) {
["to"]=>
string(6) "George"
["from"]=>
string(4) "John"
["msg"]=>
string(25) "Don't forget the meeting!"
}

最新文章

  1. 第10章 Shell编程(2)_字符截取命令
  2. MAC中开发Unity3D
  3. hdu----(1528)Card Game Cheater(最大匹配/贪心)
  4. iOS-微信支付平台
  5. 查看MySQL的警告信息
  6. redis info 各信息意义
  7. iOS中判断消息推送是否打开
  8. ios开发应用内实现多语言自由切换
  9. iosOC不可变数组遍历
  10. ViewPager实现首次进入软件时左右滑屏的软件展示效果
  11. Java自增和自减操作符——++/--的那些事
  12. nginx----------linux下nginx环境搭建遇到的一些问题汇总(多域名配置,配置文件修改问题)
  13. luogu P1070 道路游戏
  14. Python3 Srcapy 爬虫
  15. (转载)西门子PLC学习笔记十五-(数据块及数据访问方式)
  16. oracle12c中新能优化新特性之热度图和自动数据优化
  17. C# 读取config
  18. Python 读写xlsx
  19. 数据库字符集与排序规则(Character Set And Collation)
  20. New Concept English three (24)

热门文章

  1. 拖拽js和jq写法
  2. LeetCode—Longest Consecutive Sequence
  3. golang 发送多人邮件 textproto.Error{Code:554, Msg:&quot;Transaction failed: Illegal semicolon, not in group&quot;
  4. java-mybaits-00501-案例-映射分析-订单商品数据模型
  5. windows平台tensorboard的配置及使用
  6. 如何修改opencart的模版适合为mycncart系统使用
  7. 以二进制方式读取图片保存到string
  8. The Air Jordan 4 Oreo Remastered would be re-released in 2015
  9. Django restful Framework 之序列化与反序列化
  10. linux 虚拟机设置好固定ip 修改了 dns 网络需要设置成桥接模式