pip install protobuf
pip install grpcio
pip install grpcio-tools
hello.proto
syntax = "proto3";
package proto;
// 请求消息
message HelloRequest {
string name = 1;
}
// 响应消息
message HelloReply {
string message = 1;
}
// 服务定义
service Greeter {
// rpc 方法
rpc SayHello (HelloRequest) returns (HelloReply) {}
}
proto生成python代码,在proto的同级目录
python -m grpc_tools.protoc -I. --python_out=. --grpc_python_out=. hello.proto
server.py
from concurrent import futures
import grpc
import hello_pb2
import hello_pb2_grpc
class Greeter(hello_pb2_grpc.GreeterServicer):
def SayHello(self, request, context):
return hello_pb2.HelloReply(message=f'Hello {request.name}')
def serve():
server = grpc.server(futures.ThreadPoolExecutor(max_workers=10))
hello_pb2_grpc.add_GreeterServicer_to_server(Greeter(), server)
server.add_insecure_port('[::]:50051')
server.start()
server.wait_for_termination()
if __name__ == '__main__':
serve()
client.py
import grpc
import hello_pb2
import hello_pb2_grpc
def run():
channel = grpc.insecure_channel('localhost:50051')
stub = hello_pb2_grpc.GreeterStub(channel)
response = stub.SayHello(hello_pb2.HelloRequest(name='World'))
print("Greeter client received: " + response.message)
if __name__ == '__main__':
run()
先启动server。再启动client,测试是否正常
其他
报错from google.protobuf import runtime_version as _runtime_version ImportError: cannot import name 'runtime_version' from 'google.protobuf'
pip install --upgrade protobuf