zoukankan      html  css  js  c++  java
  • grpc 浅谈

    一:安装

    pip install grpcio
    pip install protobuf
    pip install grpcio-tools

    二:

    1,定义grpc接口 message.proto

    syntax = "proto3";    
    package example;    #定义包的名称,这个名称server段和client端一模一样
    service Message {       #Message  
    rpc GetMessage(GetMessageRequest) returns (GetMessageResponse) {}
    rpc ReadMessage(ReadRequest) returns (ReadResponse) {}
    rpc SetUserToken(UserTokenRequest) returns (SetTokenResponse) {}
    rpc GetUnreadMessageNumber(GetUnreadMessageNumberRequest) returns (GetUnreadMessageNumberResponse) {}
    }
    message GetMessageRequest {          #定义client端传过来的数据格式以及名称
        int32 global_user_id = 1;   
    int32 project_id = 2;
    int32 page_number = 3;
    int32 page_size = 4;
    string token = 5;
    }

    2,编译protobuf:

    python -m grpc_tools.protoc -I. --python_out=. --grpc_python_out=. ./message.proto 
    #在 example 目录中执行编译,会生成:
    message_pb2.py 与message_pb2_grpc.py

    3,client端操作  

    from __future__ import print_function
    import grpc
    from remote import message_pb2
    from remote import message_pb2_grpc

    def run():
    with grpc.insecure_channel('测试服务器ip:3000') as channel: stub = message_pb2_grpc.MessageStub(channel) response = stub.GetMessage(message_pb2.GetMessageRequest(global_user_id=1, project_id=1, token="12ew", page_number=1, page_size=30)) print("client received : %s" % response)if __name__ == '__main__': run()

    4,server端操作

    
    
    from remote import message_pb2_grpc
    from remote import message_pb2
    _ONE_DAY_IN_SECONDS = 60 * 60 * 24

    class
    MessageServicer(message_pb2_grpc.MessageServicer):
      
      def GetMessage(self, request, context):
      """
      获取消息列表
      """
       logger.info(request) #这里通过request.project_id等获取从client传过来的值,冰进行处理
          result = check_token(request.project_id, request.token)
      
      return message_pb2.GetMessageResponse(**result) #返回给client的值

    def serve():    #这里定义一直等着接收消息
    server = grpc.server(futures.ThreadPoolExecutor(max_workers=10))
    message_pb2_grpc.add_MessageServicer_to_server(MessageServicer(), server) #add_MessageServicer_to_server是自动生成的
        server.add_insecure_port('[::]:3000')
    server.start()
    try:
    while True:
    time.sleep(_ONE_DAY_IN_SECONDS)
    except KeyboardInterrupt:
    server.stop(0)

    if __name__ == '__main__':
    serve()

    ps:如果不能访问,查看下端口的权限是否放开,换个端口 

  • 相关阅读:
    操作winrar
    lucene.NET详细使用与优化详解
    js实现记住帐号或密码(js读写COOKIE)
    jQuery对select操作小结
    XMLHelper
    AJAX2用法
    as3Crypto and php, what a fun ride!
    linux文件描述符导致squid拒绝服务
    Centos 增加硬盘
    安装Squid log analyzer分析工具
  • 原文地址:https://www.cnblogs.com/52forjie/p/10075865.html
Copyright © 2011-2022 走看看