Protobuf是将传输数据转变成二进制数据格式,这样比json节省50%带宽,但是程序需要每次都对数据的传入和传出做处理,这样就需要程序员在程序效率和带宽之间做平衡。
一、下载 库文件
二、编写 文件传输规则(编写rule.proto)
规则文件相当于 定义一个 自定义数据类型 (选项、数据类型、参数名、参数位置)
message Person
{
required string name = 1;
required int32 id = 2;
optional string email = 3;
enum PhoneType {
MOBILE = 0;
HOME = 1;
WORK = 2;
}
message PhoneNumber {
required string number = 1;
optional PhoneType type = 2 [default = HOME];
}
repeated PhoneNumber phone = 4;
}
选项: required (必填)、optional (选填)、repeated (可替换)、enum (枚举)
数据类型:
参数名:
参数位置: 在同一个层级下唯一(Person 下只有1、2、3、4 但是都不重复)
三、生成规则文件(运行zip_fri.php 生成 pb_proto_rule.php)
加载 pb_parser.php 和 rule.php 生成 pb_proto_rule.php
四、压缩(运行zip_sec.php 得到 message.pb)
1.加载 ../message/pb_message.php 和 pb_proto_rule.php
2.声明 对象
3.添加数据
4.将字符串转化成二进制
5.保存 数据
五、解压缩(运行unzip.php)
1.加载../message/pb_message.php 和 pb_proto_rule.php
2.接收数据
3.声明对象
4.将二进制解析成字符串
5.取出数据
注意:php 用protobuf 会产生乱码 可以 在 生成二进制文件时先用urlencode 取出数据时用urldecode
一、下载 库文件
二、编写 文件传输规则(编写rule.proto)
规则文件相当于 定义一个 自定义数据类型 (选项、数据类型、参数名、参数位置)
message Person
{
required string name = 1;
required int32 id = 2;
optional string email = 3;
enum PhoneType {
MOBILE = 0;
HOME = 1;
WORK = 2;
}
message PhoneNumber {
required string number = 1;
optional PhoneType type = 2 [default = HOME];
}
repeated PhoneNumber phone = 4;
}
选项: required (必填)、optional (选填)、repeated (可替换)、enum (枚举)
数据类型:
参数名:
参数位置: 在同一个层级下唯一(Person 下只有1、2、3、4 但是都不重复)
三、生成规则文件(运行zip_fri.php 生成 pb_proto_rule.php)
加载 pb_parser.php 和 rule.php 生成 pb_proto_rule.php
四、压缩(运行zip_sec.php 得到 message.pb)
1.加载 ../message/pb_message.php 和 pb_proto_rule.php
2.声明 对象
3.添加数据
4.将字符串转化成二进制
5.保存 数据
五、解压缩(运行unzip.php)
1.加载../message/pb_message.php 和 pb_proto_rule.php
2.接收数据
3.声明对象
4.将二进制解析成字符串
5.取出数据
注意:php 用protobuf 会产生乱码 可以 在 生成二进制文件时先用urlencode 取出数据时用urldecode
google 提供的 demo 之使用与 php5.2及以下版本(split 在php5.3已经弃用了)可以将 库文件中的split() → preg_split()
上传文件 https://yunpan.cn/cvvwHQTEuf2t4 (提取码:e311)