欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

gRPC服务器和客户端使用不同语言

程序员文章站 2024-03-14 14:43:22
...

gRPC服务器和客户端使用不同语言

2018-7-25

gRPC的使用步骤,强烈推荐官网的tutorial:https://grpc.io/docs/tutorials/basic/c.html(C++版本)
这几天学gRPC,终于跑通了一个小目标,在此记录一下。
若已安装gRPC,可以在grpc/examples中找到官网提供的例程。
官网上对于每种支持的语言都给出了详细的使用说明(Quikstart),以及自己创建的流程(Tutorial)。如果跟着官网的指示把helloworld程序跑通了,至少可以说明gRPC安装没毛病了。
下面给出在server上运行python程序,client运行C++程序的方法介绍(其实贼简单)。

1. Defining service
1) 在.proto文件中定义service,同时在service中定义rpc(remote procedure call)。
可以查看grpc/examples/protos/hellworld.proto文件:
gRPC服务器和客户端使用不同语言
定义了service Greeter,调用方式为client发送SayHello函数,其中参数为HelloRequest;server返回HelloReply。这是最为简单的一种service格式,其他的可以见route_guide.proto文件。
2)定义message
为service中使用的所有request、response参数定义message类型。
比如,上面提到的HelloRequest参数

//定义client端请求的数据格式
message HelloRequest {
//[修饰符] 类型 字段名 = 标识符(从1开始);
  string name = 1;
}

2. Generating client and server code
python和C++语言在该步的执行方法大同小异:

//python:
python -m grpc_tools.protoc -I../../protos --python_out=. --grpc_python_out=. ../../protos/helloworld.proto
//生成两个重要文件:helloworld_pb2.py and helloworld_pb2_grpc.py

//C++:
make helloworld.grpc.pb.cc helloworld.pb.cc

3. Greating the Server
创建python版的server代码,关键部分:

import helloworld_pb2
import helloworld_pb2_grpc
##......
class Greeter(helloworld_pb2_grpc.GreeterServicer):

    def SayHello(self, request, context):
        return helloworld_pb2.HelloReply(message='Hello, %s!' % request.name)

    def SayHelloAgain(self, request, context):
        return helloworld_pb2.HelloReply(message='Hello again, %s!' % request.name)
##......
def serve():
    server = grpc.server(futures.ThreadPoolExecutor(max_workers=10))
    helloworld_pb2_grpc.add_GreeterServicer_to_server(Greeter(), server)
    server.add_insecure_port('[::]:50051')
    server.start()
##......

4. Creating the client
创建C++版的client代码,关键部分:
gRPC服务器和客户端使用不同语言
gRPC服务器和客户端使用不同语言

5. Try it out!

//运行python server
python helloworld_server.py

//运行C++ client
./helloworld_client

总结:用gRPC实现client、server的跨语言调用,本质上和同语言的调用没有差别,而且在流程上也基本无差,只不过一个是python,另一个是C++ 。

参考:
[1]python tutorial:https://grpc.io/docs/tutorials/basic/python.html
[2]python quickstart:https://grpc.io/docs/quickstart/python.html
[3]C++ tutorial:https://grpc.io/docs/tutorials/basic/c.html
[4]C++ quickstart:https://grpc.io/docs/quickstart/cpp.html

相关标签: grpc