python gRPC简单示例
Ubuntu18.04安装gRPC
- protobuf-compiler-grpc安装
sudo apt-get install protobuf-compiler-grpc
- protobuf-compiler安装
sudo apt-get install protobuf-compiler
- gRPC 的安装
pip install grpcio
- 安装 ProtoBuf 相关的 python 依赖库
pip install protobuf
- 安装 python grpc 的 protobuf 编译工具
pip install grpcio-tools
编写示例工程
- 工程结构
- 编写 proto 文件
在工程下新建stream
目录,新建stream.proto
文件,文件可名称任意syntax = "proto3"; package stream; service StreamService { rpc SimpleFun(RequestData) returns (ResponseData){} } message RequestData { string text = 1; } message ResponseData { string text = 1; }
- 编译 protobuf
切换至stream
目录,执行以下命令:
python -m grpc_tools.protoc -I. --python_out=. --grpc_python_out=. ./stream.proto
在
stream
目录中执行编译,会生成:stream_pb2.py
与stream_pb2_grpc.py
,需修正stream_pb2_grpc.py
的引用stream__pb2
的路径
- 实现 server 端,
simple_server.py
#! /usr/bin/env python # -*- coding: utf-8 -*- import grpc import time from concurrent import futures from stream import stream_pb2, stream_pb2_grpc _ONE_DAY_IN_SECONDS = 60 * 60 * 24 _HOST = 'localhost' _PORT = '8883' class servicer(stream_pb2_grpc.StreamServiceServicer): def SimpleFun(self, request, context): str = request.text print("received: " + str) return stream_pb2.ResponseData(text=('hello,gRPC')) def serve(): grpcServer = grpc.server(futures.ThreadPoolExecutor(max_workers=4)) stream_pb2_grpc.add_StreamServiceServicer_to_server(servicer(), grpcServer) grpcServer.add_insecure_port(_HOST + ':' + _PORT) grpcServer.start() try: while True: time.sleep(_ONE_DAY_IN_SECONDS) except KeyboardInterrupt: grpcServer.stop(0) if __name__ == '__main__': serve()
- 实现 client端,
simple_client.py
#! /usr/bin/env python # -*- coding: utf-8 -*- import grpc from stream import stream_pb2, stream_pb2_grpc _HOST = 'localhost' _PORT = '8883' def run(): conn = grpc.insecure_channel(_HOST + ':' + _PORT) client = stream_pb2_grpc.StreamServiceStub(channel=conn) response = client.SimpleFun(stream_pb2.RequestData(text='hello,world!')) print("received: " + response.text) if __name__ == '__main__': run()
- 执行结果
先启动simple_server.py
再启动simple_client.py
- 完整代码
https://github.com/gm19900510/stream_grpc