zoukankan      html  css  js  c++  java
  • python gRPC简单示例

    Ubuntu18.04安装gRPC

    • protobuf-compiler-grpc安装
      sudo apt-get install protobuf-compiler-grpc
    • protobuf-compiler安装
      sudo apt-get install protobuf-compiler
    • gRPC 的安装
      pip install grpcio
    • 安装 ProtoBuf 相关的 python 依赖库
      pip install protobuf
    • 安装 python grpc 的 protobuf 编译工具
      pip install grpcio-tools

    编写示例工程

    • 工程结构
      在这里插入图片描述
    • 编写 proto 文件
      在工程下新建stream目录,新建stream.proto文件,文件可名称任意
      syntax = "proto3";
      package stream;
      service StreamService {
        rpc SimpleFun(RequestData) returns (ResponseData){}
      }
      message RequestData {
        string text = 1;
      }
      
      message ResponseData {
        string text = 1;
      }
      
    • 编译 protobuf
      切换至stream目录,执行以下命令:
      python -m grpc_tools.protoc -I. --python_out=. --grpc_python_out=. ./stream.proto

    stream目录中执行编译,会生成:stream_pb2.pystream_pb2_grpc.py,需修正stream_pb2_grpc.py的引用stream__pb2的路径

    • 实现 server 端,simple_server.py
      #! /usr/bin/env python
      # -*- coding: utf-8 -*-
      import grpc
      import time
      from concurrent import futures
      from stream import stream_pb2, stream_pb2_grpc
      
      _ONE_DAY_IN_SECONDS = 60 * 60 * 24
      _HOST = 'localhost'
      _PORT = '8883'
      
      
      class servicer(stream_pb2_grpc.StreamServiceServicer):
      
          def SimpleFun(self, request, context):
              str = request.text
              print("received: " + str)
              return stream_pb2.ResponseData(text=('hello,gRPC'))
      
      
      def serve():
          grpcServer = grpc.server(futures.ThreadPoolExecutor(max_workers=4))
          stream_pb2_grpc.add_StreamServiceServicer_to_server(servicer(), grpcServer)
          grpcServer.add_insecure_port(_HOST + ':' + _PORT)
          grpcServer.start()
          try:
              while True:
                  time.sleep(_ONE_DAY_IN_SECONDS)
          except KeyboardInterrupt:
              grpcServer.stop(0)
      
      
      if __name__ == '__main__':
          serve()
      
    • 实现 client端,simple_client.py
      #! /usr/bin/env python
      # -*- coding: utf-8 -*-
      import grpc
      from stream import stream_pb2, stream_pb2_grpc
      
      _HOST = 'localhost'
      _PORT = '8883'
      
      def run():
          conn = grpc.insecure_channel(_HOST + ':' + _PORT)
          client = stream_pb2_grpc.StreamServiceStub(channel=conn)
          response = client.SimpleFun(stream_pb2.RequestData(text='hello,world!'))
          print("received: " + response.text)
      
      if __name__ == '__main__':
          run()
      
    • 执行结果
      先启动simple_server.py再启动simple_client.py
      在这里插入图片描述在这里插入图片描述
    • 完整代码
      https://github.com/gm19900510/stream_grpc
  • 相关阅读:
    20、【Linux系统编程】 exec系列函数
    3、【Linux网络编程】socket实例
    c++ 二分答案(基础应用)
    c++ 迷宫搜索(宽搜)
    c++ 广度优先搜索(宽搜)
    栈的概念
    c++ 栈的基本应用
    队列的概念
    c++ 队列的基本应用
    Knight Moves
  • 原文地址:https://www.cnblogs.com/gmhappy/p/11863945.html
Copyright © 2011-2022 走看看