gRPC传输协议如何在Python项目中使用

  介绍

gRPC传输协议如何在Python项目中使用?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

<强> gRPC简介:

gRPC是一款高性能,开源的RPC框架,产自谷歌,基于ProtoBuf序列化协议进行开发,支持多种语言(Golang、Python、Java等),本篇只介绍Python的gRPC使用。因为gRPC对HTTP/2协议的支持使其在Android, IOS等客户端后端服务的开发领域具有良好的前景.gRPC提供了一种简单的方法来定义服务,同时客户端可以充分利用HTTP2流的特性,从而有助于节省带宽,降低TCP的连接次数,节省CPU的使用等。

<强>安装:

gRPC的安装:

<代码>美元pip安装grpcio

安装ProtoBuf相关的Python依赖库:

<代码>美元pip安装ProtoBuf

安装Python gRPC的ProtoBuf编译工具:

<代码>美元pip安装grpcio-tools

<强> gRPC使用案例

下看一下项目目录结构

 gRPC传输协议如何在Python项目中使用“> </p> <p> gRPC是一套传输协议,我们需要在底层实现这套传输协议。当然这些工作都已经被做完了,所以我们只要学会使用一个具有gRPC传输协议的服务器和在客户端上调用gRPC传输协议传输数据就可以了。</p> <p> gRPC传输协议传输的数据类型为ProtoBuf数据,所以gRPC都是和ProtoBuf一块使用。</p> <p>(1)新建数据。原型文件,定义传输的数据格式和grpc服务要实现的函数</p> <pre类= syntax =,“proto3";   package 案例;   service  FormatData {//才能定义服务,用在rpc传输中   ,rpc  DoFormat (actionrequest), returns  (actionresponse) {}   }   message  actionrequest  {   ,string  text =, 1;   }   message  actionresponse {   ,string 文本=1;   }

(2)生成原型数据的python调用格式和grpc服务接口

在原型文件目录下调用下列命令

,美元python  -m  grpc_tools.protoc 我只——python_out=只——grpc_python_out=只。/data.proto

会生成:data_pb2。py与data_pb2_grpc。py,其中data_pb2.py是数据格式调用的文件,data_pb2_grpc.py是grpc传输协议接口调用的文件。

(3)创建实现了grpc传输协议的服务器端

在服务器端代码中需要实现原型文件中编写的服务接口,并重写处理函数,将重写后的服务类实例化以后添加到grpc服务器中,这样创建的grpc服务器就可以实现自定义的原型传输服务了。

 #,实现了,server 端用于接收客户端发送的数据,并对数据进行大写处理后返回给客户端
  #,!,/usr/bin/env  python
  #,- *安康;编码:utf-8  - * -
  import  grpc
  import 时间
  得到concurrent  import 期货
  得到example  import  data_pb2 data_pb2_grpc
  时间=_ONE_DAY_IN_SECONDS  60, *, 60, * 24
  时间=_HOST  & # 39; localhost # 39;
  时间=_PORT  & # 39; 8080 & # 39;
  #,实现一个派生类,重rpc中写的接口函数。自动生成的grpc文件中比原型中的服务名称多了一个服务机构
  class  FormatData (data_pb2_grpc.FormatDataServicer):
  #,才能重写接口函数。输入和输出都是原型中定义的数据类型
  def 才能;DoFormat(自我,,请求,,上下文):
  ,,,str =request.text
  ,,,return  data_pb2.actionresponse(文本=str.upper()), #,返回一个类实例
  def 服务():
  #,才能定义服务器并设置最大连接数,corcurrent.futures是一个并发库,类似于线程池的概念
  时间=grpcServer 才能;grpc.server (futures.ThreadPoolExecutor (max_workers=4)),, #,创建一个服务器
  data_pb2_grpc.add_FormatDataServicer_to_server才能(FormatData (),, grpcServer), #,在服务器中添加派生的接口服务(自己实现了处理函数)
  grpcServer.add_insecure_port才能(_HOST  +, & # 39;: & # 39;, +, _PORT),, #,添加监听端口
  grpcServer.start才能(),,#,启动服务器
  尝试才能:
  ,,,while 正确的:
  ,,,,,time . sleep (_ONE_DAY_IN_SECONDS)
  except 才能;KeyboardInterrupt:
  ,,,grpcServer.stop(0), #,关闭服务器
  if  __name__ ==, & # 39; __main__ # 39;:
  服务才能()

(4)创建实现能识别原型数据类和实现grpc传输协议。

 #,实现了客户端用于发送数据并打印接收到,server 端处理后的数据
  #,!,/usr/bin/env  python
  #,- *安康;编码:utf-8  - * -
  import  grpc
  得到example  import  data_pb2 data_pb2_grpc
  时间=_HOST  & # 39; localhost # 39;
  时间=_PORT  & # 39; 8080 & # 39;
  def 运行():
  conn 才能=,grpc.insecure_channel(时间+ _HOST  & # 39;: & # 39;, +, _PORT), #,监听频道
  打印(康涅狄格州)才能
  client 才能=,data_pb2_grpc.FormatDataStub(频道=康涅狄格州),,#,客户端使用存根类发送请求,参数为频道,为了绑定链接
  打印才能(客户端)
  response 才能=,client.DoFormat (data_pb2.actionrequest(文本=& # 39;你好,世界! & # 39;)),,#,返回的结果就是原型中定义的类
  打印才能(“收到了:,“,+,response.text)
  if  __name__ ==, & # 39; __main__ # 39;:
  ,,run () 

gRPC传输协议如何在Python项目中使用