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使用案例
强>
下看一下项目目录结构
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项目中使用