Sobes.tech
Назад к вопросам
Junior — Middle
76

Чем отличается режим передачи данных серверного стриминга от однократного вызова в gRPC?

Компании, где спрашивали
kode.ru

Ответ от нейросети

sobes.tech AI

В gRPC различают несколько режимов передачи данных:

  • Однократный вызов (Unary RPC): клиент отправляет один запрос серверу и получает один ответ. Это классический запрос-ответ.

  • Серверный стриминг (Server Streaming RPC): клиент отправляет один запрос, а сервер отвечает потоком сообщений. Клиент читает сообщения по мере их поступления, пока сервер не завершит поток.

Отличия:

  • В однократном вызове обмен происходит один раз — запрос и ответ.
  • В серверном стриминге сервер может отправлять несколько сообщений в ответ на один запрос, что удобно для передачи больших объемов данных или обновлений в реальном времени.

Пример на Go (серверный стриминг):

func (s *server) ListFeatures(req *pb.Rectangle, stream pb.RouteGuide_ListFeaturesServer) error {
    for _, feature := range features {
        if inRange(feature.Location, req) {
            if err := stream.Send(feature); err != nil {
                return err
            }
        }
    }
    return nil
}