Сделайте потоковую передачу на стороне клиента синхронной / блокирующей в приложении gRP C Java - PullRequest
0 голосов
/ 13 июля 2020

Я хочу сделать блокировку потоковой передачи на стороне клиента. Определение этого протокола может выглядеть так:

rp c RecordRoute (точка потока) возвращает (RouteSummary) {}

Как сказано в документации, для определенных типов потокового вызова можно использовать только asyn c заглушку:

неблокирующую / асинхронную заглушку, которая делает неблокирующие вызовы к серверу, где ответ возвращается асинхронно . Вы можете выполнять определенные типы потоковых вызовов только с помощью асинхронной заглушки.

Тогда как я могу сделать этот вызов блокирующим / синхронным? Возможно ли это?

1 Ответ

1 голос
/ 14 июля 2020

Заглушка блокировки может использоваться только для RPC, который клиент отправляет только один запрос. Для клиентских потоковых вызовов можно использовать только asyn c stub. Сгенерированный код для блокировки заглушки не содержит метода RP C для потоковой передачи клиента или методов двунаправленной передачи.

Если вы хотите избежать чрезмерной буферизации из-за запросов asyn c, вы можете использовать CallStreamObServer API для ручного управления потоком. С некоторыми внешними синхронизациями, такими как CountDownLatch, API asyn c может работать синхронно. Посмотрите, как работает пример ручного управления потоком gRP C .

...