потоковая передача клиента gRPC - PullRequest
0 голосов
/ 16 октября 2018

Официальная документация gRPC для потоковой передачи клиента гласит, что:

Сервер отправляет обратно один ответ, как правило, но не обязательно после получения всех запросов клиента ...

То, что я пытаюсь сделать, это перехватить ответ сервера в середине потока, чтобы прекратить отправку большего количества данных.

В Go я могу раскрутить новую программу, слушающую сообщение с сервера, используя RecvMsg , но я не могу найти способ сделать то же самое в C ++.Похоже, ClientWriter не предлагает такую ​​функциональность.

Одним из решений было бы иметь двунаправленный поток, но он задавался вопросом, есть ли какой-либо другой способ добиться этого в C ++.

1 Ответ

0 голосов
/ 22 октября 2018

Как только ответ и состояние отправлены сервером и получены обратно на клиенте (т. Е. На стеке gRPC на стороне клиента), последующие попытки Write () начнут давать сбой.Первый сбой функции Write () - это сигнал клиенту о том, что он должен прекратить запись и завершение RPC.

Таким образом, здесь есть два варианта: 1. Подождите, пока операция Write завершится неудачей, затем вызовите Finish для полученияОтвет и статус сервера.2. Переключитесь на Двунаправленную потоковую передачу, если клиент действительно хочет прочитать ответ с сервера перед вызовом Finish.

...