生成客户端和服务端代码
接下来,我们需要从 .proto
服务定义文件中生成 gRPC 客户端和服务端接口。
首先,确保已经安装 grpcio-tools
包:
pip3 install grpcio-tools
在 examples/python/route_guide
目录中,运行以下命令:
python3 -m grpc_tools.protoc -I../../protos --python_out=. --pyi_out=. --grpc_python_out=. ../../protos/route_guide.proto
注意,由于示例目录中已经提供了一个版本的生成代码,运行此命令将重新生成相应的文件,而不是创建新文件。生成的代码文件名为 route_guide_pb2.py
和 route_guide_pb2_grpc.py
,包含以下内容:
route_guide.proto
中定义的消息对应的类route_guide.proto
中定义的服务对应的类RouteGuideStub
,客户端可用于调用 RouteGuide RPCRouteGuideServicer
,定义了 RouteGuide 服务的待实现接口
route_guide.proto
中定义的服务相关函数add_RouteGuideServicer_to_server
,将 RouteGuideServicer 添加到grpc.Server
中
注意:
pb2 中的2
表示生成的代码遵循 Protocol Buffers Python API 版本 2。版本 1 已过时淘汰。这与 Protocol Buffers 自身语言版本无关,语言版本由.proto
文件中的syntax = "proto3"
或syntax = "proto2"
指定。
生成 gRPC 接口到自定义包路径
要使用自定义包路径生成 gRPC 客户端接口,你可以在 grpc_tools.protoc
命令中使用 -I
参数。此方法允许你为生成的文件指定自定义包名称。
以下是使用自定义包路径生成 gRPC 客户端接口的命令:
python -m grpc_tools.protoc -Igrpc/example/custom/path=../../protos \
--python_out=. --grpc_python_out=. \
../../protos/route_guide.proto
生成的文件将放置在 ./grpc/example/custom/path/
目录中:
./grpc/example/custom/path/route_guide_pb2.py
./grpc/example/custom/path/route_guide_pb2_grpc.py
使用此设置,生成的 route_guide_pb2_grpc.py
文件可正确地使用自定义包结构导入 protobuf 定义,如下所示:
import grpc.example.custom.path.route_guide_pb2 as route_guide_pb2
通过采用此方法,你可以确保文件将根据指定的包路径正确调用彼此。此方法允许你为 gRPC 客户端接口维护一个自定义的包结构。
Loading...
> 此处输出代码运行结果