Sobes.tech
Junior — Middle

Czym różni się tryb przesyłania danych serwera od pojedynczego wywołania w gRPC?

sobes.tech AI

Odpowiedź od AI

W gRPC wyróżnia się kilka trybów przesyłania danych:

  • Wywołanie jednokrotne (Unary RPC): klient wysyła jedno żądanie i otrzymuje jedną odpowiedź. To klasyczne żądanie-odpowiedź.

  • Strumieniowanie serwera (Server Streaming RPC): klient wysyła jedno żądanie, a serwer odpowiada strumieniem wiadomości. Klient odczytuje wiadomości w miarę ich przychodzenia, aż serwer zakończy strumień.

Różnice:

  • W wywołaniu jednokrotnym wymiana odbywa się raz — żądanie i odpowiedź.
  • W strumieniowaniu serwera, serwer może wysłać wiele wiadomości w odpowiedzi na jedno żądanie, co jest przydatne do przesyłania dużych ilości danych lub aktualizacji w czasie rzeczywistym.

Przykład w Go (strumieniowanie serwera):

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
}