本文共 3486 字,大约阅读时间需要 11 分钟。
安装 gRPC
在 Ubuntu 18.04 系统上安装 gRPC 和 Protobuf 可能需要以下步骤:
安装完成后,可以开始编写 gRPC 服务和客户端代码。
创建一个新的项目目录,按照以下结构组织代码:
.├── stream/│ ├── stream.proto│ ├── stream_pb2.py│ └── stream_pb2_grpc.py├── simple_server.py└── simple_client.py
在 stream 目录中创建 stream.proto 文件:
syntax = "proto3";package stream;service StreamService { rpc SimpleFun(RequestData) returns (ResponseData) { }}message RequestData { string text = 1;}message ResponseData { string text = 1;} 在 stream 目录中执行以下命令,生成 Python 代码:
python -m grpc_tools.protoc --proto_path=. --python_out=. --grpc_python_out=. stream.proto
注意:生成的 stream_pb2_grpc.py 文件中,stream__pb2 引用路径需要修正。
编写 simple_server.py:
#! /usr/bin/env python# -*- coding: utf-8 -*-import grpcimport timefrom concurrent import futuresfrom stream import stream_pb2, stream_pb2_grpcONE_DAY_IN_SECONDS = 60 * 60 * 24HOST = 'localhost'_PORT = '8883'class Servicer(stream_pb2_grpc.StreamServiceServicer): def SimpleFun(self, request, context): print("received: " + request.text) 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() 编写 simple_client.py:
#! /usr/bin/env python# -*- coding: utf-8 -*-import grpcfrom stream import stream_pb2, stream_pb2_grpcHOST = 'localhost'_PORT = '8883'def run(): with grpc.insecure_channel(HOST + ':' + _PORT) as conn: client = stream_pb2_grpc.StreamServiceStub(channel=conn) response = client.SimpleFun(stream_pb2.RequestData(text='hello,world!')) print("received: " + response.text)if __name__ == '__main__': run() python simple_server.py
python simple_client.py
预计看到如下输出:
received: hello,world!received: hello,gRPC
# simple_server.py#! /usr/bin/env python# -*- coding: utf-8 -*-import grpcimport timefrom concurrent import futuresfrom stream import stream_pb2, stream_pb2_grpcONE_DAY_IN_SECONDS = 60 * 60 * 24HOST = '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()# simple_client.py#! /usr/bin/env python# -*- coding: utf-8 -*-import grpcfrom 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() 转载地址:http://exafk.baihongyu.com/