gRPC 是搭建分布式应用接口和客户端的框架
在 gRPC 中,客户端应用程序可以直接调用不同机器上的服务器应用程序上的方法,就像它是本地对象一样,可以更容易创建分布式应用程序和服务
与许多 RPC 系统一样,gRPC 基于定义服务的思想,指定可以远程调用的方法及其参数和返回类型
在服务端实现这个接口并运行一个 gRPC 服务器来处理客户端调用
在客户端有一个存根(在某些语言中仅称为客户端),它提供与服务器相同的方法
gRPC 是一款高性能、开源的 RPC 框架,产自 Google,基于 ProtoBuf 序列化协议进行开发,支持多种语言(Golang、Python、Java等)
今天的分享仅介绍 Python 的 gRPC 使用,因为 gRPC 对 HTTP/2 协议的支持使其在 Android、IOS 等客户端后端服务的开发领域具有良好的前景
gRPC 提供了一种简单的方法来定义服务,同时客户端可以充分利用 HTTP2 stream 的特性,从而有助于节省带宽、降低 TCP 的连接次数、节省 CPU 的使用等
请见下图:
pip install grpcio
#gRPC 的安装
pip install protobuf
#ProtoBuf 相关的 python 依赖库
pip install grpcio-tools
#python grpc 的 protobuf 编译工具
重要的文件格式及用处,一般来说写 gRPC 服务,需要三个文件:
第一类文件是.proto文件:定义传输的数据格式和 gRPC 服务要实现的函数
gRPC 是一套传输协议,我们需要在底层实现这套传输协议,当然这些工作都已经ready,所以我们只要学会使用一个具有 gRPC 传输协议的服务器和在客户端上调用 gRPC 传输协议传输数据就可以了
gRPC 传输协议传输的数据类型为 ProtoBuf 数据
ProtoBuf 是由 Google 开发的一种数据序列化协议(类似于XML、JSON、Hessian)
ProtoBuf能够将数据进行序列化,并广泛应用在数据存储、通信协议等方面,压缩和传输效率高,语法简单,表达力强,相关的演示示例代码可以网上找找,本文就不详细说明了
第二类文件是用.proto文件 + Python:调用如下命令生成的py文件,即上文所说的客户端文件
本示例中的服务器端文件由C++服务提供,所以配置好Ip & Port 后直接调用
这里以 Storage.proto 和 StorageService.proto
文件为示例进行展示,如下图所示:
python -m grpc_tools.protoc -I. --python_out=./package --grpc_python_out=./package ./Storage.proto
python -m grpc_tools.protoc -I. --python_out=./package --grpc_python_out=./package ./StorageService.proto
会生成*_pb2.py
与 *_pb2_grpc.py
,其中*_pb2.py
是数据格式调用的文件,*_pb2_grpc.py
是 gRPC 传输协议接口调用的文件
通过调用后端的C++存储服务来查询数据的示例演示:
输入:
输出: