Python 开发
gRPC 使用
这篇笔记以一个只有 Predict 方法的 MyService 为例,串起 gRPC 与 Protocol Buffers 的基本使用路径:先在 .proto 文件中定义 package、service、rpc 方法以及 PredictRequest、PredictResponse 消息,再通过 protoc 生成 Python 侧的数据模型和 RPC 桩代码。内容区分了 my_service_pb2.py 与 my_service_pb2_grpc.py 的职责,前者承载 message、enum 对应的序列化与反序列化类型,后者提供服务端基类、注册函数和客户端 Stub,用来连接业务实现与远程调用。服务端部分展示了继承 MyServiceServicer、实现 Predict、使用线程池创建 grpc.server、注册服务并监听 50051 端口的完整流程,同时解释了生成文件中 DescriptorPool、AddSerializedFile 和 BuildTopDescriptorsAndMessages 动态注册消息类的现象,说明为什么 IDE 可能找不到定义但运行时可正常使用。客户端部分则说明如何通过 insecure_channel 建立连接、创建 MyServiceStub、构造 PredictRequest 并像调用本地方法一样执行远程 Predict,同时提醒未加密通道更适合本地测试,生产环境应考虑 TLS。文章还补充了 Go 客户端通过 protoc 插件生成代码、Dial 连接、创建客户端并带超时上下文调用服务的写法,用来体现一份 IDL 支撑跨语言调用的价值。最后将 gRPC 与 tRPC、HSF、SOFA RPC 等框架放在同一类实现思路下理解:先定义接口协议,再生成存根,服务端实现接口,客户端调用 Stub,底层负责序列化、网络传输与错误处理,适合刚开始学习 RPC、后端服务通信或跨语言接口开发的读者建立整体框架。
