хранение клиентского соединения при двунаправленном вызове - PullRequest
0 голосов
/ 26 сентября 2018

У меня есть простой двунаправленный протокольный интерфейс rpc, такой как:

rpc RouteData(stream RouteNote) returns (stream ProcessedRouteNote) {} 

Дело в том, что это может занять некоторое время, пока я не смогу вернуть ProcessedRouteNote.

Я хотел бы знать, каков рекомендуемый способ хранения подключенного клиента, чтобы я мог отправить ответный поток (например, «ProcessedRouteNote») позднее?

"def RouteData(self, request_iterator, servicer_context)"

ЭтоПохоже, что сохранение " request_iterator " для "def RouteData", которое является " RpcMethodHandler ", и последующий вызов stream_stream будет выполнять эту работу.

Буду признателен за любые отзывы.

Возможно, я мог бы еще больше упростить этот вопрос, спросив: Как я могу отправить данные / ответ конкретному клиентучто ранее отправлял запрос (двунаправленный) на сервер?Следует отметить, что целью является отправка ответа не в контексте обработчика RPC сервера.Более того, может быть десяток запросов, но только один ответ.Поэтому мне не интересно блокировать обработчик RPC для ожидания ответа.Я действительно надеюсь, что это возможно с grpc, в противном случае это действительно нарушает условия сделки для нас.

Спасибо, Майк

1 Ответ

0 голосов
/ 26 сентября 2018

У вас может быть генератор, выдающий значения ответа и ожидающий срабатывания объекта threading.Event, который может храниться где-то в хеш-таблице, в зависимости от логики вашего приложения.

...