Что происходит, когда сервер grpc повторно вызывает Send, но клиент grpc никогда не вызывает Recv?

У меня есть клиентское приложение grpc, которое может время от времени блокироваться, что приводит к ситуации, когда оно не может какое-то время вызывать функцию grpc Recv. Каково поведение сервера grpc в этой ситуации? Блокирует ли функция отправки вызовов сервера grpc? Блокируется ли он до тех пор, пока на клиенте не будет вызван Recv?


person Arjun Singri    schedule 30.04.2020    source источник
comment
Пожалуйста, подробно объясните, с какой проблемой вы столкнулись. Также поместите код, чтобы четко понять   -  person Jim Macaulay    schedule 02.05.2020


Ответы (2)


Клиент и сервер могут читать и писать сообщения в любом порядке, и это полностью зависит от приложения. Итак, отвечая на ваш вопрос, клиент блокируется на некоторое время, возможно, сообщение упадет на пол после тайм-аута.

Обработка потока на стороне клиента и на стороне сервера зависит от приложения. Поскольку два потока независимы, клиент и сервер могут читать и писать сообщения в любом порядке. Например, сервер может дождаться, пока он получит все сообщения клиента, прежде чем писать свои сообщения, или сервер и клиент могут играть в «пинг-понг» - сервер получает запрос, затем отправляет ответ, затем клиент отправляет другой запрос, основанный на ответе, и так далее.

Посмотрите, как это объяснено в официальной документации gRPC. Также примите во внимание, что есть детали, специфичные для языка, поэтому обязательно проверьте справочную документацию на выбранный вами язык.

https://grpc.io/docs/guides/concepts/#rpc-life-cycle https://grpc.io/docs/guides/concepts/#synchronous-vs-asynchronous

person Ronny López    schedule 01.05.2020

И в конце концов, если читатель не читает так же быстро, как отправка, сработает управление потоком, и отправитель будет заблокирован (пока читатель не прочитает больше).

person Easwar Swaminathan    schedule 06.05.2020
comment
Есть ли дополнительная документация по такому поведению? - person Callam Delaney; 18.08.2020