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