python使用grpc入门

安装 protobuf,grpcio,grpcio-tools

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
posted @ 2025-01-13 09:43  朝阳1  阅读(114)  评论(0)    收藏  举报