Loading

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!"
}
posted @ 2019-03-12 15:41  集君  阅读(625)  评论(0编辑  收藏  举报