Sobes.tech
Junior — Middle

Каква е разликата между режима на предаване на данни чрез сървърно стриймване и еднократното извикване в gRPC?

sobes.tech AI

Отговор от 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
}