#python #grpc
#python #grpc
Вопрос:
У меня есть простое приложение 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
он завершится вскоре после получения первого сообщения от сервера. Проверяя серверную часть (gRPC v1.18 на C ), мы заметили, что он закрыл поток после вызова grpc::ServerReaderWriter< W, R >::Read (R *msg)
возвращено false (что означает, что поток был либо выполнен, отменен, либо сбой). В результате клиент не получил исключения (StatusCode.OK) и просто завершен. На данный момент мы должны вернуть клиента к версии v1.7, пока сервер находится на версии v1.18.
Я в недоумении, в чем может быть проблема, учитывая, что обмен сообщениями был успешно произведен с обеих сторон. Есть ли способ получить дополнительную информацию о том, что произошло внутри gRPC на стороне клиента после первого сообщения?