gRPC入门-异构系统之间rpc(python客户端)

之前的程序中,客户端和服务端都是基于Java平台,而rpc的使用场景常常式异构系统之间的调用过程,因此本文使用python开发客户端,调用java的服务端。

  • 本例依赖pythonpip,安装python后自动会包含pip。安装过程参考python官网

  • 安装python版本的gRPCgRPC tools,其中gRPC tools包含proto buf编译器和代码生成插件。

        python -m pip install grpcio
        python -m pip install grpcio-tools googleapis-common-protos
    
  • pthon客户端与java服务端之前通信,使用相同的.proto文件作为契约:

        syntax = "proto3";
    
        package com.mattie.grpc;
    
        option java_package = "com.mattie.grpc";
        option java_outer_classname = "HelloWorldProtos";
    
        service Greeter {
          rpc SayHello (HelloRequest) returns (HelloReply) {}
    
          rpc biStream (stream HelloStreamRequest) returns (stream HelloStreamResponse) {};
        }
    
        message HelloRequest {
          string message = 1;
        }
    
        message HelloReply {
          string message = 1;
        }
    
        message HelloStreamRequest {
          string request_info = 1;
        }
    
        message HelloStreamResponse {
          string response_info = 1;
        }
    
  • 使用下面的命令,根据.proto文件生成python版本的代码: helloworld_pb2.pyhelloworld_pb2_grpc.py

        python -m grpc_tools.protoc -I C:\Users\18616\Documents\grpc_demo\src\main\proto --python_out=C:\Users\18616\Documents\grpc_demo\python_client --grpc_python_out=C:\Users\18616\Documents\grpc_demo\python_client C:\Users\18616\Documents\grpc_demo\src\main\proto\helloworld.proto
    

其中:

  1. helloworld_pb2.py中包含操作契约的类
  2. helloworld_pb2_grpc.py包含自动生成的客户端和服务端代码(本例子不使用这里生成的服务端代码,只使用客户端)
  • 创建客户端client.py,服务端仍然使用之前工程的MyServerMyService

      from __future__ import print_function
    
      import grpc
    
      import helloworld_pb2
      import helloworld_pb2_grpc
    
      def run():
          with grpc.insecure_channel('localhost:8899') as channel:
              stub = helloworld_pb2_grpc.GreeterStub(channel)
              response = stub.SayHello(helloworld_pb2.HelloRequest(message='you'))
          print("Greeter client received: " + response.message)
    
      if __name__ == '__main__':
          run()
    
  • 启动MyServerclient.py:

     python client.py
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容