grpc_python 入门

grpc入门_helloWord

protocol buffers使用(简称pb)

pd文件中一般包含rpc服务定义以及消息定义

定义rpc服务

要定义一个服务,你必须在你的 .proto 文件中指定 service。然后在你的服务中定义 rpc 服务接口,指定请求的和响应的消息类型。具体定义如下:
rpc 服务名 (请求消息) returns (响应消息)


service R outeGuide 
{ // (Method definitions not shown) 

rpc RouteChat (stream RouteNote)  returns (stream RouteNote) {}
}

具体示例如下:
在这里插入图片描述

定义消息
  • 指定包名(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客户端和服务器端代码

利用 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,具体如下截图所示。
在这里插入图片描述
在这里插入图片描述
GetFeature 在定义的时候 就是接收 的是 Point 类型的请求消息,返回的是Feature类型消息。
在这里插入图片描述
其中self.db是一个json数据库,存放的是坐标信息和名称信息,具体信息如下:
在这里插入图片描述

创建客户端

客户端就可以执行不同的请求,通过服务端得到对应的响应消息。
在这里插入图片描述

  • run方法 :初始化一个服务端实例 stub,并传递给 guide_get_ont_feature方法
  • guide_get_feature方法:参数为 RouteGuideStub一个引用
    • guide_get_one_feature方法 通过传递过来的Point消息,返回具体的响应消息。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值