Ответ
В gRPC существует четыре типа (или режима) RPC-вызовов, которые определяют, как клиент и сервер обмениваются данными:
-
Unary RPC (Унарный вызов)
- Описание: Самый простой тип. Клиент отправляет один запрос и получает один ответ, как при обычном вызове функции.
- Пример использования: Запрос информации о пользователе по его ID.
.proto
синтаксис:// Получить пользователя по запросу rpc GetUser(UserRequest) returns (UserResponse);
-
Server streaming RPC (Серверная потоковая передача)
- Описание: Клиент отправляет один запрос, а в ответ получает поток сообщений от сервера. Сервер держит соединение открытым и отправляет данные по мере их готовности.
- Пример использования: Подписка на ленту новостей или получение большого списка данных по частям.
.proto
синтаксис:// Получить поток обновлений по запросу rpc ListUpdates(ListRequest) returns (stream UpdateResponse);
-
Client streaming RPC (Клиентская потоковая передача)
- Описание: Клиент отправляет на сервер поток сообщений. Когда клиент заканчивает передачу, сервер обрабатывает весь поток и возвращает один ответ.
- Пример использования: Загрузка большого файла (видео, логов) на сервер по частям.
.proto
синтаксис:// Отправить поток метрик и получить итоговый отчет rpc RecordMetrics(stream MetricRequest) returns (SummaryResponse);
-
Bidirectional streaming RPC (Двунаправленная потоковая передача)
- Описание: Клиент и сервер могут отправлять друг другу потоки сообщений независимо друг от друга через одно соединение. Порядок сообщений в каждом потоке сохраняется.
- Пример использования: Реализация чата, интерактивные сессии.
.proto
синтаксис:// Обмениваться сообщениями в чате rpc Chat(stream ChatMessage) returns (stream ChatMessage);