Protocol Buffers数据传输及存储协议简单使用
我们知道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!"
}