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
}