gRPC кодирует потоки как тела HTTP. Перед каждым сообщением находится пятибайтовый заголовок, состоящий из длины сообщения и байта флага. Он не использует SERVER_PUSH или другие специфичные для HTTP / 2 функции для потоковой передачи.
По своей сути, gRPC является потоковым. Унарный (одиночный запрос, одиночный ответ) и потоковая передача на сервер (одиночный запрос) - это просто особые случаи для создания более чистых API или более оптимизированного поведения ввода / вывода. Но в прямом эфире все выглядит так же, как потоковое.
Спецификация HTTP / 1 допускает, но не требует потоковых и двунаправленных соединений, но некоторые реализации не поддерживают их. Но с природой HTTP / 2, как правило, не поддерживает больше работы. Кроме того, нет прокси HTTP / 2 десятилетней давности, чтобы вызвать проблемы совместимости; gRPC может работать с экосистемой HTTP / 2 для поддержки потоковой передачи.
Для получения дополнительной информации о кодировке gRPC см. PROTOCOL-HTTP2.md , особенно Length-Prefixed-Message
.
.