나는이 메시지를 따르고있다. Route_Guide sample.파이썬 gRPC로 스트리밍 메시지를 처리하는 방법
해당 샘플이 발생하고 특정 메시지에 회신하지 않고 메시지를 읽습니다. 후자는 제가 성취하려고하는 것입니다.
여기 내가 지금까지이 작업은 다음과 같습니다
import grpc
...
channel = grpc.insecure_channel(conn_str)
try:
grpc.channel_ready_future(channel).result(timeout=5)
except grpc.FutureTimeoutError:
sys.exit('Error connecting to server')
else:
stub = MyService_pb2_grpc.MyServiceStub(channel)
print('Connected to gRPC server.')
this_is_just_read_maybe(stub)
def this_is_just_read_maybe(stub):
responses = stub.MyEventStream(stream())
for response in responses:
print(f'Received message: {response}')
if response.something:
# okay, now what? how do i send a message here?
def stream():
yield my_start_stream_msg
# this is fine, i receive this server-side
# but i can't check for incoming messages here
내가 스텁에 read()
또는 write()
을하지 않는 것, 모든 반복자로 구현 될 것으로 보인다.
this_is_just_read_maybe(stub)
에서 메시지를 보내려면 어떻게해야합니까? 그게 올바른 접근 방법입니까?
service MyService {
rpc MyEventStream (stream StreamingMessage) returns (stream StreamingMessage) {}
}
감사합니다. Nathaniel, 저것을 시험해 보겠습니다. 파이썬 gRPC가 Golang 구현과 같이'.send()'및'.recv()'프리미티브를 공개하지 않는 특별한 이유가 있으며 다른 모든 것들은 거의 무엇입니까? – evilSnobu
API를 디자인 할 당시에는 파이썬 사용 사례에 대한 약간의 모서리 케이스로 간주 되었기 때문에 가장 일반적이었던 것과 좀 더 많은 작업을 통해 가능한 적은 공통적 인 것이있었습니다. –
이러한 모든 잠금을 사용하여 많은 클라이언트에 대한 양방향 연결을 처리 할 때이 솔루션은 얼마나 확장 성이 있습니까? – Skulas