一、Protobuf文件编写

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

二、工具转化

  1. 下载protoc 编译文件,去github上面,找到与python 版本一致的编译包进行下载
  2. 执行命令

    1. protoc --python_out= ./ xx.proto
  3. 就会生成 XX_pb.py文件

image.png

  1. 写一个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