grpc_python 入门

grpc入门_helloWord protocol buffers使用(简称pb)
pd文件中一般包含rpc服务定义以及消息定义
定义rpc服务 【grpc_python 入门】要定义一个服务,你必须在你的 .proto 文件中指定 service。然后在你的服务中定义 rpc 服务接口,指定请求的和响应的消息类型。具体定义如下:
rpc 服务名 (请求消息) returns (响应消息)

service R outeGuide { // (Method definitions not shown) rpc RouteChat (stream RouteNote)returns (stream RouteNote) {} }

具体示例如下:
grpc_python 入门
文章图片

定义消息
  • 指定包名(pb避免冲突)
  • 在.proto文件中定义消息,消息类似结构体形式有不同的字段组成(并且可以嵌套定义)。
  • 消息中的每个字段有字段限制,字段类型,字段名,编号组成。
    • required 必须填写
    • optional 可选的
    • repeated 重复的
syntax = "proto3"; package tutorial; message Person { required string name = 1; required int32 id = 2; optional string email = 3; enum PhoneType { MOBILE = 0; HOME = 1; WORK = 2; } message PhoneNumber { required string number = 1; optional PhoneType type = 2[default = HOME]; }repeated PhoneNumber phone = 4; }

具体示例如下:
grpc_python 入门
文章图片

生成gRPC客户端和服务器端代码 利用 filename.proto 文件的定义来 生成 gRPC客户端和服务端接口,可以通过 grpcio-tools 工具来生成对应的python代码。
具体实现命令如下:
python -m grpc_tools.protoc-I../../protos--python_out=.--grpc_python_out=.../../protos/route_guide.proto

  • python -m grpc_tools.protoc : 用python来编译pd文件
  • -I :指定源路径(pd文件)
  • –python_out 、 --grpc_python_out :指定生成py文件的路径
  • …/…/protos/route_guide.proto:指定源pd文件
以route_guide.proto为例,编译后的结果文件为 route_guide_pb2.py 和 route_guide_pb2_grpc.py
  • route_guide_pb2.py :主要是调用 .proto文件中数据
  • route_guide_pb2_grpc.py
    • BetaRouteGuideServicer 实现了 pd文件中 service RouteGuide 服务中定义的接口
    • RouteGuideStub:可以被客户端初始化一个可以调用服务的 一个实例,也叫存根
创建服务器 还是以 route_guide.proto 中最简单 GetFeature 为例。route_guide_server.py文件 中实现 route_guide_pb2.RouteGuide 服务接口的一个类:RouteGuideServicer,具体如下截图所示。
grpc_python 入门
文章图片

grpc_python 入门
文章图片

GetFeature 在定义的时候 就是接收 的是 Point 类型的请求消息,返回的是Feature类型消息。
grpc_python 入门
文章图片

其中self.db是一个json数据库,存放的是坐标信息和名称信息,具体信息如下:
grpc_python 入门
文章图片

创建客户端 客户端就可以执行不同的请求,通过服务端得到对应的响应消息。
grpc_python 入门
文章图片

  • run方法 :初始化一个服务端实例 stub,并传递给 guide_get_ont_feature方法
  • guide_get_feature方法:参数为 RouteGuideStub一个引用
    • guide_get_one_feature方法 通过传递过来的Point消息,返回具体的响应消息。

    推荐阅读