_pb2.py
每一个message对应的信息存储,比如我们的request与response在这里被定义extension
_pb2_grpc.py
用来存储每一个服务的server与客户端以及注册的server的工具
客户端名为:service_name + Stub
服务端名为:service_name + Servicer
注册服务为:add_服务端名_to_server
#hello_bilibili.proto
syntax = "proto3";
package test;
service Bibili {
rpc HelloDewei(HelloDeweiReq) returns (HelloDeweiReply){}
rpc HelloTest(stream HelloTestReq) returns (stream HelloTestReply){}
rpc TestClientRecvStream(TestClientRecvStreamRequest) returns (stream TestClientRecvStreamResponse){}
}
message HelloDeweiReq {
string name = 1;
int32 age = 2;
}
message HelloDeweiReply {
string result =1;
}
message HelloTestReq {
string name = 1;
int64 age = 2;
repeated string data = 3;
map<string,HelloTestReqnumbervalue> number = 4;
}
message HelloTestReqnumbervalue {
string name = 1;
int64 age = 2;
bool is_active = 3;
}
message HelloTestReply {
string result =1;
}
message TestClientRecvStreamRequest {
string data =1;
}
message TestClientRecvStreamResponse {
string result =1;
}
#client.py
#coding:utf-8
import grpc
import hello_bilibili_pb2 as pb2
import hello_bilibili_pb2_grpc as pb2_grpc
def run():
conn = grpc.insecure_channel("127.0.0.1:5000")
client = pb2_grpc.BibiliStub(channel=conn)
# response = client.HelloDewei(pb2.HelloDeweiReq(
# name='dewei',
# age = 28
# ))
# print(response.result)
response = client.TestClientRecvStream(pb2.TestClientRecvStreamRequest(
data='dewei',
))
for item in response:
print(item.result)
if __name__ == '__main__':
run()
#service.py
#coding:utf-8
import time
import grpc
import hello_bilibili_pb2 as pb2
import hello_bilibili_pb2_grpc as pb2_grpc
from concurrent import futures
class Bibili(pb2_grpc.BibiliServicer):
def HelloDewei(self, request, context):
name = request.name
age = request.age
result = f'my name is {name}, iam {age} years old'
return pb2.HelloDeweiReply(result=result)
def TestClientRecvStream(self,request,context):
index = 1
while context.is_active():
data = request.data
if data == "close":
context.cancel()
time.sleep(1)
index += 1
yield pb2.TestClientRecvStreamResponse(
result = "send %d %s"%(index,data)
)
def run():
grpc_server = grpc.server(
futures.ThreadPoolExecutor(max_workers=4)
)
pb2_grpc.add_BibiliServicer_to_server(Bibili(),grpc_server)
grpc_server.add_insecure_port('0.0.0.0:5000')
print("server will start at 0.0.0.0:5000")
grpc_server.start()
try:
while 1:
time.sleep(3600)
except KeyboardInterrupt:
grpc_server.stop(0)
if __name__ == '__main__':
run()