假设我想创建一个类似聊天的应用程序。客户端可以向服务器发送文本,反之亦然。文本交换的顺序可以是任意的。在
服务器依赖于另一个控制服务器响应流的流。
GRPC流作为python生成器公开。服务器现在如何才能同时等待客户端输入和另一个流上的输入?通常情况下,我们会使用select()之类的东西,但是这里有生成器。在
我有一些实现所需行为的示例代码,但需要在客户端和服务器端添加一个线程。没有线程我怎么能达到同样的结果?在
原型:syntax = 'proto3';
service Scenario {
rpc Chat(stream DPong) returns (stream DPong) {}
}
message DPong {
string name = 1;
}
服务器:
^{pr2}$
客户import threading
import grpc
import time
import scenario_pb2_grpc, scenario_pb2
def run():
channel = grpc.insecure_channel('localhost:50052')
stub = scenario_pb2_grpc.ScenarioStub(channel)
print('client connected')
def stream():
while 1:
yield scenario_pb2.DPong(name=input('$ '))
input_stream = stub.Chat(stream())
def read_incoming():
while 1:
print('received: {}'.format(next(input_stream).name))
thread = threading.Thread(target=read_incoming)
thread.daemon = True
thread.start()
while 1:
time.sleep(1)
if __name__ == '__main__':
print('client starting ...')
run()