一、Protobuf文件编写
syntax = "proto3";
package test;
service Bibili{
rpc HelloDewei(HelloDeWeiReq) returns (HelloDeweiRsp){}
}
message HelloDeWeiReq{
string name = 1; // 定义string 类型的
int32 age = 2;
}
message HelloDeweiRsp{
string result = 1;
}
二、工具转化
- 下载protoc 编译文件,去github上面,找到与python 版本一致的编译包进行下载
执行命令
protoc --python_out= ./ xx.proto
就会生成 XX_pb.py文件
- 写一个py文件进行调用 ```protobuf from google.protobuf import json_format
import hello_billbil_pb2 as pb2
request = pb2.HelloDeWeiReq() request.name = ‘boby’ request.age = 11
res_str = request.SerializeToString() # 序列化 变成二进制
print(‘res_str’, res_str)
request2 = pb2.HelloDeweiRsp()
request2.ParseFromString(res_str) # 反序列化,将二进制转化成对象
res_json = json_format.MessageToJson(request2) # 设置为json print(res_json) ```
三、序列化和解析
每个Message类都有序列化和解析方法:
• SerializeToString():将message序列化并返回str类型的结果(str类型只是二进制数据的一个容器而已,而不是文本内容)。如果message没有初始化,抛出message.EncodeError异常。
• SerializePartialToString():将message序列化并返回str类型的结果,但是不检查message是否初始化。
• ParseFromString(data):从给定的二进制str解析得到message对象。
如果要在生成的PB类的基础上增加新的功能,应该采用包装(wrapper)的方式,永远不要将PB类作为基类派生子类添加新功能。
参考链接:https://blog.csdn.net/a464057216/article/details/54932719