1.安装

python -m pip install grpcio # 安装grpc python -m pip install grpcio-tools # 安装 grpc tools

2.proto 文件

  1. syntax = "proto3";
  2. package test;
  3. service Bibili{
  4. rpc HelloDewei(HelloDeWeiReq) returns (HelloDeweiRsp){}
  5. }
  6. message HelloDeWeiReq{
  7. string name = 1; // name 表示名称,name的编码号是1,定义string 类型的
  8. int32 age = 2;
  9. }
  10. message HelloDeweiRsp{
  11. string result = 1;
  12. }

3.使用proto 的python文件

  1. 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 客户端进行调用

  1. import json
  2. import grpc
  3. from google.protobuf import json_format
  4. import hello_billbil_pb2 as pb2
  5. request = pb2.HelloDeWeiReq()
  6. request.name = 'boby'
  7. request.age = 11
  8. res_str = request.SerializeToString() # 序列化 变成二进制
  9. print('res_str', res_str)
  10. request2 = pb2.HelloDeweiRsp()
  11. request2.ParseFromString(res_str) # 反序列化,将二进制转化成对象
  12. res_json = json_format.MessageToJson(request2) # 设置为json
  13. print(res_json)

序列化和解析

每个Message类都有序列化和解析方法:
• SerializeToString():将message序列化并返回str类型的结果(str类型只是二进制数据的一个容器而已,而不是文本内容)。如果message没有初始化,抛出message.EncodeError异常。
• SerializePartialToString():将message序列化并返回str类型的结果,但是不检查message是否初始化。
• ParseFromString(data):从给定的二进制str解析得到message对象。
如果要在生成的PB类的基础上增加新的功能,应该采用包装(wrapper)的方式,永远不要将PB类作为基类派生子类添加新功能。