gRPC og højtydende API'er · Lektion

Streaming-RPC'er: Server, klient og tovejs

Gå videre end unære kald, og lær gRPC's tre streamingtilstande til at sende sekvenser af meddelelser over ét enkelt kald.

Lektion 4 af 413 trin

Streaming-RPC'er: Server, klient og tovejs er en gratis gRPC og højtydende API'er-lektion på CoddyKit. Dette er lektion 4 af 4. Du kan læse hele lektionen gratis nedenfor — og derefter øve dig praktisk i browseren med en indbygget kodeeditor og en AI-vejleder, der er tilgængelig døgnet rundt. Den er en del af læringsforløbet i gRPC og højtydende API'er, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. gRPC og højtydende API'er-kurset indeholder 4 lektioner i alt.

Ud over unary

En unary RPC er én anmodning og ét svar. Men mange problemer kræver en række meddelelser — feeds, uploads og chat.

gRPC tilbyder tre streamingtilstande, der bygger på HTTP/2-strømme.

De fire metodeformer

I en .proto-tjeneste kan du erklære:

  • Unary: én ind, én ud.
  • Serverstreaming: én ind, mange ud.
  • Klientstreaming: mange ind, én ud.
  • Tovejs: mange ind, mange ud.

Erklæring af strømme i Proto

Nøgleordet stream markerer en parameter som en strøm.

service Feed {
  rpc Watch (WatchRequest) returns (stream Event);
  rpc Upload (stream Chunk) returns (UploadResult);
  rpc Chat (stream Message) returns (stream Message);
}

Serverstreaming

Klienten sender én anmodning, og serveren svarer med mange meddelelser, indtil den lukker strømmen.

Velegnet til: livefeeds, store resultatsæt og statusopdateringer.

// Server side (Go-style pseudocode)
func (s *server) Watch(req *WatchRequest, stream Feed_WatchServer) error {
  for _, e := range events {
    stream.Send(e)
  }
  return nil
}

Klientstreaming

Klienten sender mange meddelelser, hvorefter serveren returnerer ét svar.

Velegnet til: filuploads, batchindlæsning og aggregeringer.

// Server reads the whole client stream, then replies once
func (s *server) Upload(stream Feed_UploadServer) error {
  for {
    chunk, err := stream.Recv()
    if err == io.EOF {
      return stream.SendAndClose(&UploadResult{})
    }
  }
}

Tovejsstreaming

Begge sider sender strømme uafhængigt af hinanden over det samme kald. Meddelelser kan frit flettes ind mellem hinanden.

Velegnet til: chat, samarbejde i realtid og interaktive protokoller.

Hvorfor det er effektivt

Alle fire former bruger én enkelt HTTP/2-strøm — der oprettes ikke en ny forbindelse for hver meddelelse.

Multipleksing betyder, at mange streamingkald deler én forbindelse uden blokering forrest i køen.

Flowkontrol

HTTP/2 har indbygget flowkontrol, så en langsom læser automatisk lægger modtryk på en hurtig skriver.

Det forhindrer en streamingserver i at overbelaste en klient, der ikke kan følge med.

Afslutning af en strøm

Strømme lukkes eksplicit:

  • Serverstreaming slutter, når serveren returnerer.
  • Klientstreaming slutter, når klienten signalerer slutningen på strømmen, og serveren svarer.
  • Tovejsstreaming slutter, når begge halvdele er færdige, eller når der opstår en fejl eller annullering.

Fejl og annullering

Begge sider kan annullere eller mislykkes midt i en strøm. Modparten modtager en statuskode og bør rydde op.

Håndtér altid EOF og fejlreturneringer fra Recv() / Send() for at undgå lækager.

Valg af tilstand

Vælg ud fra dataformen:

  • Engangsanmodning og -svar: unary.
  • Send mange resultater: serverstreaming.
  • Send mange, og få en opsummering: klientstreaming.
  • Kontinuerlig kommunikation i begge retninger: tovejsstreaming.

Hurtig kontrol

Test din forståelse af streaming-RPC'er.

Opsummering

Du har lært om gRPC's streamingtilstande.

  • Unary, serverstreaming, klientstreaming og tovejsstreaming.
  • Markér strømme med nøgleordet stream i proto.
  • Alle bruger én enkelt multiplekset HTTP/2-strøm med indbygget flowkontrol.
  • Vælg den tilstand, der passer til dine datas form.
Gratis at komme i gang

Lær gRPC og højtydende API'er med en AI-underviser — gratis

Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.

Kurser
12
Lektioner
48

Ofte stillede spørgsmål

Er lektionen “Streaming-RPC'er: Server, klient og tovejs” gratis?

Ja — hele teksten til “Streaming-RPC'er: Server, klient og tovejs” kan læses gratis her på nettet. Hvis du vil øve dig interaktivt med en indbygget kodeeditor og en AI-vejleder døgnet rundt og få adgang til resten af gRPC og højtydende API'er-kurset, skal du opgradere til CoddyKit PRO. gRPC og højtydende API'er-kurset indeholder 4 lektioner i alt.

Hvad lærer jeg i “Streaming-RPC'er: Server, klient og tovejs”?

Gå videre end unære kald, og lær gRPC's tre streamingtilstande til at sende sekvenser af meddelelser over ét enkelt kald. Du øver dig i gRPC og højtydende API'er med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.

Skal jeg have erfaring for at begynde på gRPC og højtydende API'er?

Der kræves ingen tidligere erfaring. gRPC og højtydende API'er på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 4 af 4.

Hvor lang tid tager lektionen “Streaming-RPC'er: Server, klient og tovejs”?

De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.

Kan jeg skrive og køre kode i denne gRPC og højtydende API'er-lektion?

Ja. Alle gRPC og højtydende API'er-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.

Alle lektioner i dette kursus

  1. Definition af Protobuf-skemaer
  2. Generering af gRPC-kode
  3. En simpel unary gRPC-service
  4. Streaming-RPC'er: Server, klient og tovejs
← Tilbage til gRPC og højtydende API'er