定义接口
// test.proto
syntax = "proto3";
option cc_generic_services = true;
service Greeter {
// 第一个接口
rpc One(OneRequest) returns (OneResponse) {}
// 第二个接口
rpc Two(TwoRequest) returns (TwoResponse) {}
}
// 第1个接口 请求值
message OneRequest {
string name = 1;
}
// 第1个接口 返回值
message OneResponse {
string message = 1;
}
// 第2个接口 请求值
message TwoRequest {
string age = 2;
}
// 第2个接口 返回值
message TwoResponse {
string message = 2;
}
执行编译命令
python -m grpc_tools.protoc -I . --python_out=./ --pyi_out=./ --grpc_python_out=./ ./test.proto
创建服务端
# grpc_server.py
import test_pb2,test_pb2_grpc
import grpc
from concurrent import futures
# 继承生成的Server类做逻辑接口
class Greeter(test_pb2_grpc.GreeterServicer):
"""
注意:
这里函数的命名需要跟proto文件里面的接口名字一致
"""
def One(self, request, context):
# 第1个逻辑接口
return test_pb2.OneResponse(message='Hello, ' + request.name)
def Two(self, request, context):
# 第2接口逻辑接口
return test_pb2.TwoResponse(message='Goodbye, ' + request.name)
# 启动服务端
def serve():
server = grpc.server(futures.ThreadPoolExecutor(max_workers=10))
test_pb2_grpc.add_GreeterServicer_to_server(Greeter(), server)
server.add_insecure_port('[::]:8800')
server.start()
print("启动成功,等待接受数据...")
server.wait_for_termination()
if __name__ == '__main__':
serve()
客户端
# grpc_client.py
import grpc
import test_pb2,test_pb2_grpc
def run():
# 创建连接
channel = grpc.insecure_channel('127.0.0.1:8800')
# 创建客户端
client = test_pb2_grpc.GreeterStub(channel)
# 创建 传参值
obj = test_pb2.OneRequest(name="IM")
# 请求接口
response = client.One(obj)
print("response",response)
if __name__ == '__main__':
run()
标签:__,pb2,Python,接口,server,Grpc,test,随笔,grpc
From: https://www.cnblogs.com/wanghong1994/p/17898908.html