gRPC服务器和客户端使用不同语言
gRPC服务器和客户端使用不同语言
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文件:
定义了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代码,关键部分:
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
上一篇: 【精华】排序算法汇总——希尔排序与堆排序
下一篇: python logger日志功能使用
推荐阅读
-
gRPC服务器和客户端使用不同语言
-
使用C语言来扩展Python程序和Zope服务器的教程
-
node.js使用net模块创建服务器和客户端示例【基于TCP协议】
-
Python编程语言的35个与众不同之处(语言特征和使用技巧)
-
Linux下安装Memcached服务器和客户端与PHP使用示例
-
微信小程序授权 获取用户的openid和session_key【后端使用java语言编写】,我写的是get方式,目的是测试能否获取到微信服务器中的数据,后期我会写上post请求方式。
-
node.js使用http模块创建服务器和客户端完整示例
-
Python编程语言的35个与众不同之处(语言特征和使用技巧)
-
使用Go实现TLS服务器和客户端的示例
-
Linux下安装Memcached服务器和客户端与PHP使用示例