RPC 远程过程调用协议RPC(Remote Procedure Call Protocol)。RPC 是指远程过程调用,也就是说两台服务器A,B,一个应用部署在 A 服务器上,想要调用 B 服务器上的应用提供的函数/方法,由于不在一个内存空间,不能直接调用,需要通过网络来表达调用的语义和传达调用的数据。
gRPC gPRC是一个高性能、通用的开源RPC框架,基于 RrotoBuf 序列化协议开发。
安装 grpc 库
pip install grpcio grpc-tools protobuf
实现一个简单 grpc 通信
定义hello_bilibili.proto
syntax ="proto3";
package test;
service Bibili {
rpc HelloDewei(HelloweiReq) returns (HelloDeweiReply){}
rpc HelloTest(stream HelloTestRequst) returns (stream HelloTestResponse){}}
massage HelloweiReq {
string name;
int32 age;}
massage HelloTestRequest {
string name =1;
int64 age =2;
repeated string data =3;
message HelloTestRequestNumberValue {
string name =1;
int32 age =2;bool is_active =3;}map<string, HelloTestRequestNumberValue> number =4;}
massage HelloTestResponse {}
massage HelloDeweiReply {
string result =1;}
定义server
import grpc
import hello_bilibili_pb2 as pb2
import hello_bilibili_pb2_grpc as pb2_grpc
from concurrent import futures
classBibili(pb2_grpc.BibiliServicer):defHelloDewei(self, request, context):
name = request.name
age = request.age
result =f'my name is {name}, i am {age}'return pb2.HelloDeweiReply(result=result)defrun():
grpc_server = grpc.server(
futures.ThreadPoolExecutor(max_workers=4))
pb2_grpc.add_BibiliServicer_to_server(Bibili(), grpc_server)print("server will start at 0.0.0.0:5000")try:
time.sleep(3600)except keyboardInterrupt:
grpc_server.stop(0)if __name__=="__main__":
run()