Python gRPC 【RPC框架】 简介

Python gRPC 【RPC框架】 简介_第1张图片


gRPC 是由 Google 开发的高性能、开源的远程过程调用(RPC)框架,而 grpcio 是其 Python 实现库。它使用 Protocol Buffers (protobuf) 作为接口定义语言(IDL),支持跨语言通信,适用于微服务、分布式系统等场景。


核心特点
  1. 高性能
    • 基于 HTTP/2 协议(多路复用、头部压缩、二进制传输)。
    • 使用 Protocol Buffers 高效序列化(体积小、速度快)。
  2. 跨语言支持
    • 服务端/客户端可用不同语言实现(如 Python、Go、Java)。
  3. 四种通信模式
    • 一元 RPC(普通请求-响应)
    • 服务端流式 RPC
    • 客户端流式 RPC
    • 双向流式 RPC
  4. 强类型接口
    • 通过 .proto 文件明确定义服务和方法,减少错误。

安装
# 安装 grpcio 库
pip install grpcio

# 安装代码生成工具(编译 .proto 文件)
pip install grpcio-tools

开发步骤
  1. 定义接口(.proto 文件)
    创建 example.proto

    syntax = "proto3";
    
    service Greeter {
      rpc SayHello (HelloRequest) returns (HelloReply) {}
    }
    
    message HelloRequest {
      string name = 1;
    }
    
    message HelloReply {
      string message = 1;
    }
    
  2. 生成 Python 代码
    使用 grpc_tools 编译 .proto 文件:

    python -m grpc_tools.protoc -I. --python_out=. --grpc_python_out=. example.proto
    

    生成:example_pb2.py(消息类)和 example_pb2_grpc.py(服务存根)。

  3. 实现服务端
    server.py

    import grpc
    from concurrent import futures
    import example_pb2
    import example_pb2_grpc
    
    class Greeter(example_pb2_grpc.GreeterServicer):
        def SayHello(self, request, context):
            return example_pb2.HelloReply(message=f"Hello, {request.name}!")
    
    def serve():
        server = grpc.server(futures.ThreadPoolExecutor(max_workers=10))
        example_pb2_grpc.add_GreeterServicer_to_server(Greeter(), server)
        server.add_insecure_port("[::]:50051")
        server.start()
        server.wait_for_termination()
    
    if __name__ == "__main__":
        serve()
    
  4. 实现客户端
    client.py

    import grpc
    import example_pb2
    import example_pb2_grpc
    
    def run():
        channel = grpc.insecure_channel("localhost:50051")
        stub = example_pb2_grpc.GreeterStub(channel)
        response = stub.SayHello(example_pb2.HelloRequest(name="Alice"))
        print("Server response:", response.message)
    
    if __name__ == "__main__":
        run()
    
  5. 运行

    # 启动服务端
    python server.py
    
    # 启动客户端(另一个终端)
    python client.py
    # 输出:Server response: Hello, Alice!
    

进阶功能
  • 流式处理
    .proto 中使用 stream 关键字定义流式方法:

    rpc ChatStream (stream Message) returns (stream Message) {}
    
  • 安全认证
    使用 SSL/TLS 证书加密通信:

    server_credentials = grpc.ssl_server_credentials(...)
    server.add_secure_port("[::]:50051", server_credentials)
    
  • 超时与重试
    客户端设置超时:

    response = stub.SayHello(HelloRequest(name="Alice"), timeout=10)
    
  • 元数据
    传递头部信息(如认证令牌):

    metadata = [("authorization", "Bearer xxx")]
    response = stub.SayHello(request, metadata=metadata)
    

适用场景
  • 微服务间通信
  • 实时流处理(如聊天、日志传输)
  • 跨语言系统集成
  • 高性能后端服务(如游戏、金融)

资源
  • 官方文档
  • GitHub 仓库
  • Protocol Buffers 指南

通过 grpcio,Python 开发者可以快速构建高效、跨平台的 RPC 服务,是现代分布式系统的理想工具。

你可能感兴趣的:(Python库大全,python,rpc,开发语言)