• Python使用GRPC


    0.安装依赖库

    pip install grpcio
    pip install protobuf
    pip install grpcio-tools
    

      

    1.编写proto文件

    // Copyright 2015 The gRPC Authors
    //
    // Licensed under the Apache License, Version 2.0 (the "License");
    // you may not use this file except in compliance with the License.
    // You may obtain a copy of the License at
    //
    //     http://www.apache.org/licenses/LICENSE-2.0
    //
    // Unless required by applicable law or agreed to in writing, software
    // distributed under the License is distributed on an "AS IS" BASIS,
    // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    // See the License for the specific language governing permissions and
    // limitations under the License.
    syntax = "proto3";
    
    option java_multiple_files = true;
    option java_package = "io.grpc.examples.helloworld";
    option java_outer_classname = "HelloWorldProto";
    option objc_class_prefix = "HLW";
    
    package helloworld;
    
    // The greeting service definition.
    service Greeter {
        // Sends a greeting
        rpc SayHello (HelloRequest) returns (HelloReply) {}
    }
    
    // The request message containing the user's name.
    message HelloRequest {
        string name = 1;
    }
    
    // The response message containing the greetings
    message HelloReply {
        string message = 1;
    }
    

      

    2.编译生成proto对应源文件

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

      

    3.编写server端代码

    # -*- coding: utf-8 -*-
    # Author: areful
    #
    # pip install grpcio
    # pip install protobuf
    # pip install grpcio-tools
    # ...
    
    # Copyright 2015, Google Inc.
    # All rights reserved.
    
    """The Python implementation of the GRPC helloworld.Greeter server."""
    
    import time
    from concurrent import futures
    
    from gj.grpc.helloworld.helloworld_pb2 import *
    from gj.grpc.helloworld.helloworld_pb2_grpc import *
    
    _ONE_DAY_IN_SECONDS = 60 * 60 * 24
    
    
    class Greeter(GreeterServicer):
    
        def SayHello(self, request, context):
            return HelloReply(message='Hello, %s!' % request.name)
    
    
    def serve():
        server = grpc.server(futures.ThreadPoolExecutor(max_workers=10))
        add_GreeterServicer_to_server(Greeter(), server)
        server.add_insecure_port('[::]:50051')
        server.start()
        try:
            while True:
                time.sleep(_ONE_DAY_IN_SECONDS)
        except KeyboardInterrupt:
            server.stop(0)
    
    
    if __name__ == '__main__':
        serve()
    

      

    4.编写client端代码

    # -*- coding: utf-8 -*-
    # Author: areful
    #
    # pip install grpcio
    # pip install protobuf
    # pip install grpcio-tools
    # ...
    
    # Copyright 2015, Google Inc.
    # All rights reserved.
    
    """The Python implementation of the GRPC helloworld.Greeter client."""
    
    from __future__ import print_function
    
    from gj.grpc.helloworld.helloworld_pb2 import *
    from gj.grpc.helloworld.helloworld_pb2_grpc import *
    
    
    def run():
        channel = grpc.insecure_channel('localhost:50051')
        stub = GreeterStub(channel)
        response = stub.SayHello(HelloRequest(name='world'))
        print("Greeter client received: " + response.message)
    
    
    if __name__ == '__main__':
        run()
    

      5.分别运行server、client代码,运行输出如下:

  • 相关阅读:
    CMake 3.8.2 Online Manuals
    如何查找UDID
    产品经理那些事儿学习整理笔记
    IOS KVO与NSNotificationCenter简单使用
    整理分享内容
    iOS解决两个静态库的冲突 duplicate symbol
    IOS 添加libMobileVLCKit .a到项目中编译问题
    OpenERP为form和tree视图同时指定view_id的方法
    openerp related字段解读
    openerp图片路径处理
  • 原文地址:https://www.cnblogs.com/areful/p/10372617.html
Copyright © 2020-2023  润新知