Programmering av WebSockets og sanntidssystemer · leksjon

Tilbakepress og bunting av meldinger

Hindre at raske produsenter overbelaster trege konsumenter ved hjelp av tilbakepressignaler og bunting av meldinger over WebSockets.

Leksjon 4 av 413 trinn

Tilbakepress og bunting av meldinger er en gratis leksjon i Programmering av WebSockets og sanntidssystemer på CoddyKit. Dette er leksjon 4 av 4. Du kan lese hele leksjonen gratis nedenfor – og deretter øve praktisk i nettleseren med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i Programmering av WebSockets og sanntidssystemer, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i Programmering av WebSockets og sanntidssystemer inneholder totalt 4 leksjoner.

Problemet med ulik hastighet

Når en produsent sender raskere enn en konsument eller nettverket kan håndtere, hoper meldingene seg opp i buffere, minnebruken øker, og forsinkelsen blir større. Håndtering av dette kalles tilbakestramming.

Sende­bufferen

Hver WebSocket har en utgående buffer. Hvis De fortsetter å kalle send raskere enn socketen kan tømme bufferen, vokser den uten begrensning.

Måle buffertrykk

Nettleseren viser bufferedAmount: antallet byte som står i kø, men ennå ikke er sendt. En stigende verdi viser at konsumentsiden sakker akterut.

if (ws.bufferedAmount > 1_000_000) {
  // pause sending
}

Bruke tilbakestramming

Når bufferen er stor, stanser De produksjonen til den er tømt. Fortsett når den faller under en lav vannlinje.

function maybeSend(data) {
  if (ws.bufferedAmount < HIGH_WATER) ws.send(data);
  else pendingFlush();
}

Tilbakestramming på serversiden

I Node.js kan ws.send ta imot en callback, og den underliggende strømmen signaliserer når De bør redusere hastigheten. Respekter signalet i stedet for å oversvømme strømmen ukritisk.

ws.send(data, () => {
  // safe to send the next chunk
});

Hvorfor gruppere meldinger

Det er ineffektivt å sende tusenvis av små meldinger: hver melding har innrammingskostnader. Gruppering samler mange oppdateringer i én ramme og reduserer kostnadene betydelig.

Tidsbasert gruppering

Samle meldinger i et kort tidsintervall, og send dem deretter samlet ved hjelp av en tidsstyring.

let batch = [];
setInterval(() => {
  if (batch.length) { ws.send(JSON.stringify(batch)); batch = []; }
}, 50);

Størrelsesbasert gruppering

Alternativt kan De sende gruppen når den når en bestemt størrelse, slik at forsinkelsen per melding begrenses.

function add(msg) {
  batch.push(msg);
  if (batch.length >= 100) flush();
}

Slå sammen oppdateringer

For tilstander som endres raskt, for eksempel markørposisjonen, beholder De bare den nyeste verdien i stedet for alle mellomliggende verdier. Dette kalles sammenslåing og er en effektiv form for gruppering.

Avveiningen med forsinkelse

Gruppering gir litt høyere forsinkelse i bytte mot langt høyere gjennomstrømming. Juster intervallet slik at brukerne ikke opplever forsinkelse, samtidig som De fortsatt oppnår bedre effektivitet.

Beste praksis

Håndter flytkontroll på en god måte:

  • Følg med på bufferedAmount for å oppdage trykk
  • Sett produksjonen på pause over en høy vannlinje
  • Gruppér små meldinger etter tid eller størrelse
  • Slå sammen tilstander som endres raskt

Rask sjekk

Test kunnskapene Deres om flytkontroll.

Oppsummering

De lærte om flytkontroll over WebSockets:

  • Tilbakestramming forhindrer overfylte buffere
  • Overvåk bufferedAmount og sett på pause over en vannlinje
  • Gruppér små meldinger etter tid eller størrelse
  • Slå sammen tilstander som endres raskt

Sanntidskanalen holder seg nå stabil under belastning.

Gratis å komme i gang

Lær deg Programmering av WebSockets og sanntidssystemer med en AI-veileder – gratis

Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.

Kurs
12
Leksjoner
47

Ofte stilte spørsmål

Er leksjonen «Tilbakepress og bunting av meldinger» gratis?

Ja – hele teksten i «Tilbakepress og bunting av meldinger» er gratis å lese her på nettet. For å øve interaktivt med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt, og for å låse opp resten av Programmering av WebSockets og sanntidssystemer-kurset, kan du oppgradere til CoddyKit PRO. Kurset i Programmering av WebSockets og sanntidssystemer inneholder totalt 4 leksjoner.

Hva lærer jeg i «Tilbakepress og bunting av meldinger»?

Hindre at raske produsenter overbelaster trege konsumenter ved hjelp av tilbakepressignaler og bunting av meldinger over WebSockets. Du øver på Programmering av WebSockets og sanntidssystemer med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.

Trenger jeg erfaring for å begynne med Programmering av WebSockets og sanntidssystemer?

Ingen tidligere erfaring er nødvendig. Programmering av WebSockets og sanntidssystemer på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 4 av 4.

Hvor lang tid tar leksjonen «Tilbakepress og bunting av meldinger»?

De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.

Kan jeg skrive og kjøre kode i denne Programmering av WebSockets og sanntidssystemer-leksjonen?

Ja. Alle Programmering av WebSockets og sanntidssystemer-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.

Alle leksjonene i dette kurset

  1. Implementering av publish/subscribe-meldinger
  2. Request-response over WebSockets
  3. Toveis strømming og flytkontroll
  4. Tilbakepress og bunting av meldinger
← Tilbake til Programmering av WebSockets og sanntidssystemer