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

Как реализована потоковая / двунаправленная потоковая передача клиента gRPC по протоколу HTTP / 2?
Потоковая передача с сервера имеет смысл, поскольку она может использовать принудительную отправку с сервера для отправки нескольких ответов на запрос, но мне не ясно, как он передает двунаправленные сообщения через HTTP / 2, как при веб-сокете.

1 Ответ

0 голосов
/ 10 ноября 2018

gRPC кодирует потоки как тела HTTP. Перед каждым сообщением находится пятибайтовый заголовок, состоящий из длины сообщения и байта флага. Он не использует SERVER_PUSH или другие специфичные для HTTP / 2 функции для потоковой передачи.

По своей сути, gRPC является потоковым. Унарный (одиночный запрос, одиночный ответ) и потоковая передача на сервер (одиночный запрос) - это просто особые случаи для создания более чистых API или более оптимизированного поведения ввода / вывода. Но в прямом эфире все выглядит так же, как потоковое.

Спецификация HTTP / 1 допускает, но не требует потоковых и двунаправленных соединений, но некоторые реализации не поддерживают их. Но с природой HTTP / 2, как правило, не поддерживает больше работы. Кроме того, нет прокси HTTP / 2 десятилетней давности, чтобы вызвать проблемы совместимости; gRPC может работать с экосистемой HTTP / 2 для поддержки потоковой передачи.

Для получения дополнительной информации о кодировке gRPC см. PROTOCOL-HTTP2.md , особенно Length-Prefixed-Message.

.
...