私はこれに続くRoute_Guide sampleです。Python 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) {}
}
ありがとうナサニエル、私はそれを試してみます。 Golangの実装のように、PythonのgRPCが '.send()'と '.recv()'プリミティブを公開しないという特別な理由があります。 – evilSnobu
APIが設計された時点では、Pythonのユースケースのための少しの辺のケースとみなされていましたので、最も簡単なこととより一般的なことはもう少しの作業で可能でした。 –
これらのすべてのロックを持つ多くのクライアントに双方向接続を提供すると、この解決策はどれほど拡張性がありますか? – Skulas