Sobes.tech
Junior — Middle

Kā atšķiras servera straumēšanas datu pārraides režīms no vienreizējas izsaukšanas gRPC?

sobes.tech AI

Atbilde no AI

gRPC atšķir vairākus datu pārraides režīmus:

  • Vienreizējs izsaukums (Unary RPC): klients nosūta vienu pieprasījumu un saņem vienu atbildi. Tas ir klasiskās pieprasījuma-atbildes modelis.

  • Servera straumēšana (Server Streaming RPC): klients nosūta vienu pieprasījumu, un serveris atbild ar ziņojumu plūsmu. Klients lasa ziņojumus tiklīdz tie ienāk, līdz serveris pabeidz plūsmu.

Atšķirības:

  • Vienreizējā izsaukumā apmaiņa notiek tikai vienu reizi — pieprasījums un atbilde.
  • Servera straumēšanā, serveris var nosūtīt vairākus ziņojumus kā atbildi uz vienu pieprasījumu, kas ir noderīgi lielu datu apjomu vai reāllaika atjauninājumu pārraidē.

Piemērs Go valodā (servera straumēšana):

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
}