Какие типы RPC-вызовов существуют в gRPC?

Ответ

В gRPC существует четыре типа (или режима) RPC-вызовов, которые определяют, как клиент и сервер обмениваются данными:

  1. Unary RPC (Унарный вызов)

    • Описание: Самый простой тип. Клиент отправляет один запрос и получает один ответ, как при обычном вызове функции.
    • Пример использования: Запрос информации о пользователе по его ID.
    • .proto синтаксис:
      // Получить пользователя по запросу
      rpc GetUser(UserRequest) returns (UserResponse);
  2. Server streaming RPC (Серверная потоковая передача)

    • Описание: Клиент отправляет один запрос, а в ответ получает поток сообщений от сервера. Сервер держит соединение открытым и отправляет данные по мере их готовности.
    • Пример использования: Подписка на ленту новостей или получение большого списка данных по частям.
    • .proto синтаксис:
      // Получить поток обновлений по запросу
      rpc ListUpdates(ListRequest) returns (stream UpdateResponse);
  3. Client streaming RPC (Клиентская потоковая передача)

    • Описание: Клиент отправляет на сервер поток сообщений. Когда клиент заканчивает передачу, сервер обрабатывает весь поток и возвращает один ответ.
    • Пример использования: Загрузка большого файла (видео, логов) на сервер по частям.
    • .proto синтаксис:
      // Отправить поток метрик и получить итоговый отчет
      rpc RecordMetrics(stream MetricRequest) returns (SummaryResponse);
  4. Bidirectional streaming RPC (Двунаправленная потоковая передача)

    • Описание: Клиент и сервер могут отправлять друг другу потоки сообщений независимо друг от друга через одно соединение. Порядок сообщений в каждом потоке сохраняется.
    • Пример использования: Реализация чата, интерактивные сессии.
    • .proto синтаксис:
      // Обмениваться сообщениями в чате
      rpc Chat(stream ChatMessage) returns (stream ChatMessage);