Protocol Buffers数据传输及存储协议简单使用
2024-08-25 09:18:07
我们知道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!"
}
最新文章
- 第10章 Shell编程(2)_字符截取命令
- MAC中开发Unity3D
- hdu----(1528)Card Game Cheater(最大匹配/贪心)
- iOS-微信支付平台
- 查看MySQL的警告信息
- redis info 各信息意义
- iOS中判断消息推送是否打开
- ios开发应用内实现多语言自由切换
- iosOC不可变数组遍历
- ViewPager实现首次进入软件时左右滑屏的软件展示效果
- Java自增和自减操作符——++/--的那些事
- nginx----------linux下nginx环境搭建遇到的一些问题汇总(多域名配置,配置文件修改问题)
- luogu P1070 道路游戏
- Python3 Srcapy 爬虫
- (转载)西门子PLC学习笔记十五-(数据块及数据访问方式)
- oracle12c中新能优化新特性之热度图和自动数据优化
- C# 读取config
- Python 读写xlsx
- 数据库字符集与排序规则(Character Set And Collation)
- New Concept English three (24)
热门文章
- 拖拽js和jq写法
- LeetCode—Longest Consecutive Sequence
- golang 发送多人邮件 textproto.Error{Code:554, Msg:";Transaction failed: Illegal semicolon, not in group";
- java-mybaits-00501-案例-映射分析-订单商品数据模型
- windows平台tensorboard的配置及使用
- 如何修改opencart的模版适合为mycncart系统使用
- 以二进制方式读取图片保存到string
- The Air Jordan 4 Oreo Remastered would be re-released in 2015
- Django restful Framework 之序列化与反序列化
- linux 虚拟机设置好固定ip 修改了 dns 网络需要设置成桥接模式