У меня есть клиентское приложение grpc, которое может время от времени блокироваться, что приводит к ситуации, когда оно не может какое-то время вызывать функцию grpc Recv. Каково поведение сервера grpc в этой ситуации? Блокирует ли функция отправки вызовов сервера grpc? Блокируется ли он до тех пор, пока на клиенте не будет вызван Recv?
Что происходит, когда сервер grpc повторно вызывает Send, но клиент grpc никогда не вызывает Recv?
Ответы (2)
Клиент и сервер могут читать и писать сообщения в любом порядке, и это полностью зависит от приложения. Итак, отвечая на ваш вопрос, клиент блокируется на некоторое время, возможно, сообщение упадет на пол после тайм-аута.
Обработка потока на стороне клиента и на стороне сервера зависит от приложения. Поскольку два потока независимы, клиент и сервер могут читать и писать сообщения в любом порядке. Например, сервер может дождаться, пока он получит все сообщения клиента, прежде чем писать свои сообщения, или сервер и клиент могут играть в «пинг-понг» - сервер получает запрос, затем отправляет ответ, затем клиент отправляет другой запрос, основанный на ответе, и так далее.
Посмотрите, как это объяснено в официальной документации gRPC. Также примите во внимание, что есть детали, специфичные для языка, поэтому обязательно проверьте справочную документацию на выбранный вами язык.
https://grpc.io/docs/guides/concepts/#rpc-life-cycle https://grpc.io/docs/guides/concepts/#synchronous-vs-asynchronous
И в конце концов, если читатель не читает так же быстро, как отправка, сработает управление потоком, и отправитель будет заблокирован (пока читатель не прочитает больше).