zoukankan      html  css  js  c++  java
  • (一)grpc-创建一个简单的grpc 客户端和服务器

    创建一个简单的grpc 客户端和服务端

    最近在工作中需要用到grpc ,学习来源于bilibili dewei_zhang的视频

    创建一个protobuf 文件:

    hello_world.proto

    // 定义一个服务的框架,服务名和服务下的函数名,以及函数下的request 和response,
    // 和resquest 和response 对应的参数
    
    //使用哪种protobuf 协议
    syntax="proto3";
    package test;
    
    //服务名:Mianmian,以及里面定义的rpc函数HelloMian
    service Mianmian{
        rpc HelloMian(HelloMianReq) returns(HelloMianReply)
        {}   //添加一些插件
    }
    
    message HelloMianReq{
        string  name = 1;
        int32 age =2;
    }
    
    message HelloMianReply{
        string result =1;
    }

    生成对应的python文件:hello_world_pb2.py ,hello_world_pb2_grpc.py

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

    编写service 代码:

    service.py

    #!/usr/bin/env python
    # -*- coding:utf-8 -*-
    #@Time  : 2021/6/5 13:37
    #@Author: Tana
    #@File  : service.py
    
    import grpc
    import hello_world_pb2 as pb2
    import hello_world_pb2_grpc as pb2_grpc
    from concurrent import futures
    import time
    class Mianmian(pb2_grpc.MianmianServicer):
        def HelloMian(self, request, context):
            name=request.name
            age=request.age
    
            result={"code":"succeed",
                "data":f'my name is {name},i am {age} years old'
            }
            return pb2.HelloMianReply(result=result)
    
    def run():
        #定义grpc线程数量
        grpc_server=grpc.server(futures.ThreadPoolExecutor(max_workers=4))
        #注册服务到grpc_server
        pb2_grpc.add_MianmianServicer_to_server(Mianmian(),grpc_server)
        #绑定ip和端口号
        grpc_server.add_insecure_port('0.0.0.0:5001')
        print("server will start at 0.0.0.0:5001")
        #这个start 在python里面会启动一下就停了,所以需要写一个无限循环
        grpc_server.start()
        try:
            while 1:
                print("1")
                time.sleep(3600)
    
        except KeyboardInterrupt:
            grpc_server.stop(0)
    
    if __name__=="__main__":
        run()

    编写client端 代码:

    client.py

    #!/usr/bin/env python
    # -*- coding:utf-8 -*-
    #@Time  : 2021/6/6 15:26
    #@Author: Tana
    #@File  : client.py
    import grpc
    import hello_world_pb2_grpc as pb2_grpc
    import hello_world_pb2 as pb2
    
    def run():
        #定义一个频道,绑定服务器端对应的ip 和端口号
        conn = grpc.insecure_channel('0.0.0.0:5000')
        #生成客户端
        client = pb2_grpc.MianmianStub(channel=conn)
        response = client.HelloMian(pb2.HelloMianReq(
            name="mianmian",
            age=18
        ))
        print(response.result)
    if  __name__=='__main__':
        run()

     

  • 相关阅读:
    JavaScript
    css-装饰
    html 标签
    remote connect openshift mysql
    MySQL
    how to run a continuous background task on OpenShift
    openshifit 安装 redis
    Python之路,Day6
    选择排序
    C语言实现链表
  • 原文地址:https://www.cnblogs.com/yan-2010/p/14854127.html
Copyright © 2011-2022 走看看