1.安装
python -m pip install grpcio # 安装grpc python -m pip install grpcio-tools # 安装 grpc tools
2.proto 文件
syntax = "proto3";
package test;
service Bibili{
rpc HelloDewei(HelloDeWeiReq) returns (HelloDeweiRsp){}
}
message HelloDeWeiReq{
string name = 1; // name 表示名称,name的编码号是1,定义string 类型的
int32 age = 2;
}
message HelloDeweiRsp{
string result = 1;
}
3.使用proto 的python文件
python -m grpc_tools.protoc --python_out=. --grpc_python_out=. -I helloworld.proto
生成两个文件,一个hello_billbil_pb2.py 客户端文件,还有一个hello_billbil_pb2_grpc 文件
4. 查看protobuf生成的代码
5.python 客户端进行调用
import json
import grpc
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类作为基类派生子类添加新功能。