我有一个简单的gRPC Python应用程序,用于监听和处理服务器流消息。基本上,它看起来像:
# creating the server RPC stream from stub
notification_stream = stub.GetNotification( filter )
try:
for notification in notification_stream:
# do something with received notification
print "Got {0}".format(notification)
except Exception:
print "Got exception"
raise
print "terminated"
它与gRPC v1.7一起很好地工作。但是在v1.18下,使用新生成的客户端代码,notification_stream
将在收到服务器的第一条消息后立即终止。检查服务器端(C ++中的gRPC v1.18),我们观察到它在调用grpc::ServerReaderWriter< W, R >::Read (R *msg)
之后关闭了流。
返回false(表示流已完成,取消或失败)。结果,客户端没有收到任何异常(StatusCode.OK)并只是终止了。现在,我们必须在服务器处于v1.18时将客户端恢复到v1.7。
由于双方成功地交换了消息,我可能会感到困惑。在收到第一条消息后,是否可以通过某种方式获得更多有关客户端gRPC内部发生的信息?