Tilbakepress og bunting av meldinger
Hindre at raske produsenter overbelaster trege konsumenter ved hjelp av tilbakepressignaler og bunting av meldinger over WebSockets.
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.
Sendebufferen
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å
bufferedAmountfor å 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
bufferedAmountog 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.
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
- Implementering av publish/subscribe-meldinger
- Request-response over WebSockets
- Toveis strømming og flytkontroll
- Tilbakepress og bunting av meldinger