1.protobuf简介
1.1 protobuf是什么
- ProtoBuf (Google Protocol Buffer)是由google公司用于数据交换的序列结构化数据格式,具有跨平台、跨语言、可扩展特性,类型于常用的XML及JSON,但具有更小的传输体积、更高的编码、解码能力
- protobuf相对于Json有更高的转化效率,时间效率和空间是json 的3-5倍
2.编写protobuf文件
2.1 编写protobuf文件
vim hello.proto
syntax = "proto3"; // 声明使用哪一种的protobuf
package test; // 包名称
service Bibili { // 服务 类似视图
rpc HelloYoyo (HelloYoyoRequse) returns (HelloYoyoResponse) {
} // rpc 服务
}
message HelloYoyoRequse { // 定义 HelloYoyoRequse
string name = 1;
int32 age = 2;
}
message HelloYoyoResponse { // 定义 HelloYoyoResponse
string result = 1;
}
2.2 把protobuf文件转化为python文件
python -m grpc_tools.protoc -I. --python_out=. --grpc_python_out=. hello.proto
--python_out # 输出一个python对应的文件 路径为当前路径
--grpc_python_out # 输出一个python_grpc对应的文件 路径为当前路径
hello.proto # 转成上面两个文件的名称
执行完会生成两个文件
- hello_pb2.py
- 每个message对应的信息存储,比如我们的request与response在这里被定义extension
- hello_pb2_grpc.py
- 用了存储每个服务的server与客户端以注册server的工具
- 客户端名称为:service_name + Stub
- 服务器名称为:service_name + Servicer
- 注册服务的函数:add_服务端名称_to_server
2.2 protobuf常用数据类型
类型 |
说明 |
string |
字符串,要求是utf-8或7-bit与ascii编码的字符串 |
bytes |
比特类型 |
bool |
布尔类型 |
int32 |
32位整数 |
int64 |
64位整数 |
float |
浮点数 |
repeated |
数组(列表) repeated string data=1; |
map |
字典类型 map <string, string> date=1; |
2.3 常用的protobuf特殊字符
类型 |
说明 |
package |
包名 |
syntax |
protobuf版本 |
service |
定义服务 |
rpc |
定义服务中的方法 |
stream |
定义的方法传输为流传输 |
message |
定义消息体 message User{} |
extend |
扩展消息体 extend User{} |
import |
导入插件 |
// |
注释 |