Grpc在Python下的小小小操作

本来已经快写完了,。手贱关了网页,只能重头开始写哇!
Grpc是Google一个开源的基于http/2的一个rpc(远程过程调用)框架,同时使用 protocol buffers (类似json)来作为序列化和反序列化,支持多种语言。
本文主要内容为
* 在一个 .proto 文件内定义服务。
*用 protocol buffer 编译器生成服务器和客户端代码。
*使用 gRPC 的 Python API 来实现一个简单的客户端和服务器。
首先我们要在python使用grpc,先安装pip,接下来开始安装必要的包和库
安装gRPC:
pip install grpc
安装 ProtocolBuffers 相关的 python 依赖库:
pip install protobuf
安装 python grpc 的 protobuf 编译工具:
pip install grpcio-tools
然后可以开始定义一个服务(创建客户端和服务端方法等)
服务文件格式为 xx.proto
下面文件名为 hello.proto
message为参数和返回值格式 rpc为方法 syntax设置当前版本

syntax = "proto3"; service Action{ rpc hihi(ActionRequest) returns (ActionResponse){} }message ActionRequest { string action = 1; }message ActionResponse{ string message = 1; }

下一段长长的指令来编译出两个py文件
python -m grpc_tools.protoc -I. --python_out=. --grpc_python_out=. ./hello.proto
编译生成 hello_pd2.py和hello_pd2_grpc.py两个文件
客户端和服务端通过继承 编译产生的两个文件的基类来完成
首先是服务端的构建
from concurrent import futures import timeimport grpcimport helloworld_pb2 import helloworld_pb2_grpc_ONE_DAY_IN_SECONDS = 60 * 60 * 24#继承基类 class Greeter(helloworld_pb2_grpc.GreeterServicer):def SayHello(self, request, context): return helloworld_pb2.HelloReply(message='Hello, %s!' % request.name)def serve(): #定义服务器并设置最大连接数,corcurrent.futures是一个并发库,类似于线程池的概念 server = grpc.server(futures.ThreadPoolExecutor(max_workers=10)) #添加一个服务 helloworld_pb2_grpc.add_GreeterServicer_to_server(Greeter(), server) #设置服务器监听端口号 server.add_insecure_port('[::]:50051') server.start() try: while True: time.sleep(_ONE_DAY_IN_SECONDS) except KeyboardInterrupt: server.stop(0)if __name__ == '__main__': serve()

以下是客户端代码
from __future__ import print_functionimport grpcimport helloworld_pb2 import helloworld_pb2_grpcdef run(): #创建客户端与服务端的连接 channel = grpc.insecure_channel('IP:PORT') stub = helloworld_pb2_grpc.GreeterStub(channel) #直接发起请求 (请求参数根据格式来) response = stub.SayHello(helloworld_pb2.HelloRequest(name='you')) print("Greeter client received: " + response.message)if __name__ == '__main__': run()

【Grpc在Python下的小小小操作】grpc简例完成!

    推荐阅读