总结一下在使用gRPC的过程中踩过的那些坑, 一定要仔细看官方文档!!!
参考文档:
Language Guide (proto3)
Python Generated Code
1.前言
出于项目需要,使用Python对gRPC进行二次开发。以前从没有接触过相关的概念,对于RPC、xml、json的了解也只限于听过名字的程度。初步接触gRPC的推荐阅读资源:
gRPC官方(基本上所有资料都在这里,但全英文和一些专有名词看得我头疼)
Protobuf3语言指南(中文翻译版)
gRPC | Python视频教程
grpc| python 实战 grpc
python grpc框架之一 简单示例
Carson带你学序列化:手把手带你分析 Protocol Buffer使用源码
2.开发流程
使用如下命令将proto文件编译为两个可供二次开发使用的python文件(文件具体内容不用管,也不是很看得懂)
python -m grpc_tools.protoc --python_out=. --grpc_python_out=. -I. xxx.proto
xxx_pb2.py —— 和gRPC通信时双方交互的数据格式有关
xxx_pb2_grpc.py —— 和gRPC通信双方有关
使用Python进行二次开发的时候直接调用这两个文件里的方法就行了。
3.proto
proto具体语法,待补充
4.Python二次开发
在使用Python进行gRPC的二次开发的时候,我们一般会自定义client和server,两者的主要目标如下:
client——将按照proto格式打包好的数据发送给对应的server
server——实现预定义的RPC功能,接收并解析数据,回复client
具体实现的例子可参考前言中的相关资源。
5.踩过的坑
bytes
使用bytes()将变量转换为bytes类型时,有以下三种情况:
如果是数字,则不需要指定编码方式;
如果是string,则需要指定编码方式;
如果是数组,则数组里的数字需要在0-256之间。
序列化/反序列化
实际上转换为bytes类型时,应该使用SerializeToString()方法
相应的,反序列化的时候使用ParseFromString()方法
bytes&序列化/反序列化示例



