用Python编写简单的gRPC服务
grpc官网python参考:https://www.grpc.io/docs/languages/python/quickstart/
http://grpc.github.io/grpc/python/grpc.html
- Python 3.5 or higher
- pip version 9.0.1 or higher
安装gRPC相关的库
grpcio-tools主要用根据我们的protocol buffer定义来生成Python代码,官方解释是Protobuf code generator for gRPC。
#apt install python3-pip
pip install grpcio
pip install protobuf
pip install grpcio_tools
编写proto文件
proto是一个协议文件,客户端和服务器的通信接口正是通过proto文件协定的,可以根据不同语言生成对应语言的代码文件。
heartbeat.proto文件:
syntax = "proto3";
message HeartbeatRequest{
string Host = 1;
int32 Mem = 2;
int32 Disk = 3;
int32 Cpu = 4;
int64 Timestamp = 5;
int64 Seq = 6;
}
message HeartbeatResponse{
int32 ErrCode = 1;
string ErrMsg = 2;
}
heartbeat_service.proto
syntax = "proto3";
import "heartbeat.proto";
// HeartBeatService
service HeartBeatService{
rpc HeartBeat(HeartbeatRequest) returns(HeartbeatResponse){}
}
核心 就是一个 用于生成需要用到数据类型的文件;一个就是用于生成相关调用方法的类。 一个定义数据类型,一个用于定义方法。
通过proto生成.py文件
proto文件需要通过protoc生成对应的.py文件。protoc的下载地址 。下载解压之后,将解压目录添加到path的环境变量中。
pip install grpcio
install grpcio-tools
#pip install --upgrade protobuf
注意:【下面命令是在proto文件所在的目录执行的,-I 用来指定proto的目录是 . 】
python -m grpc_tools.protoc -I=. --python_out=.. heartbeat.proto
python -m grpc_tools.protoc -I=. --grpc_python_out=.. heartbeat_service.proto
- -I 指定proto所在目录
- -m 指定通过protoc生成py文件
- –python_out生成py文件的输出路径
- heartbeat.proto、heartbeat_service.proto为 输入的proto文件
生成的文件名中 xxx_pb2.py 就是我们刚才创建数据结构文件,里面有定义函数参数和返回数据结构; xxx_pb2_grpc.py 就是我们定义的函数,定义了我们客服端rpc将来要调用方法。
编译客户端和服务端代码
服务端
#!/usr/bin/env python
# coding=utf-8
import sys
from concurrent import futures
import time