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 导入插件
// 注释