Backpressure og batching af beskeder
Undgå, at hurtige producenter overbelaster langsomme forbrugere, ved hjælp af backpressure-signaler og batching af beskeder over WebSockets.
Backpressure og batching af beskeder er en gratis WebSockets og programmering af realtidssystemer-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 WebSockets og programmering af realtidssystemer, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. WebSockets og programmering af realtidssystemer-kurset indeholder 4 lektioner i alt.
Problemet med forskellig hastighed
Når en producent sender hurtigere, end en forbruger eller netværket kan håndtere, hober meddelelser sig op i buffere, hukommelsesforbruget vokser, og svartiden stiger. Håndtering af dette kaldes backpressure.
Sendebufferen
Hver WebSocket har en udgående buffer. Hvis du bliver ved med at kalde send hurtigere, end socketen kan tømme bufferen, vokser den uden grænse.
Måling af bufferpres
Browseren viser bufferedAmount: antal bytes, der ligger i kø, men endnu ikke er sendt. En stigende værdi viser, at forbrugersiden sakker bagud.
if (ws.bufferedAmount > 1_000_000) {
// pause sending
}Anvendelse af backpressure
Når bufferen er stor, skal du stoppe produktionen, indtil den er tømt. Genoptag, når den falder under en lav tærskel.
function maybeSend(data) {
if (ws.bufferedAmount < HIGH_WATER) ws.send(data);
else pendingFlush();
}Backpressure på serversiden
I Node.js kan ws.send modtage et tilbagekald, og den underliggende datastrøm signalerer, hvornår du skal sænke hastigheden. Respektér signalet i stedet for blindt at oversvømme den.
ws.send(data, () => {
// safe to send the next chunk
});Hvorfor samle meddelelser i grupper
Det er ineffektivt at sende tusindvis af små meddelelser: Hver meddelelse har overhead fra indramningen. Batching samler mange opdateringer i én ramme og reducerer overhead markant.
Tidsbaseret batching
Indsaml meddelelser i et kort tidsrum, og send dem derefter samlet med en timer.
let batch = [];
setInterval(() => {
if (batch.length) { ws.send(JSON.stringify(batch)); batch = []; }
}, 50);Størrelsesbaseret batching
Alternativt kan du sende dem, når gruppen når en bestemt størrelse, så forsinkelsen pr. meddelelse begrænses.
function add(msg) {
batch.push(msg);
if (batch.length >= 100) flush();
}Sammenlægning af opdateringer
For tilstand, der ændrer sig hurtigt, f.eks. en markørposition, skal du kun gemme den seneste værdi i stedet for alle mellemliggende værdier. Dette kaldes sammenlægning og er en effektiv form for batching.
Afvejningen af svartid
Batching bytter en smule svartid for en langt højere gennemstrømning. Justér tidsvinduet, så brugerne ikke oplever forsinkelse, samtidig med at du opnår effektiviteten.
Bedste praksis
Håndtér datastrømmen effektivt:
- Overvåg
bufferedAmountfor at registrere pres - Sæt produktionen på pause over en høj tærskel
- Saml små meddelelser efter tid eller størrelse
- Sammenlæg tilstand, der ændrer sig hurtigt
Hurtigt tjek
Test din viden om flowkontrol.
Opsummering
Du har lært om flowkontrol over WebSockets:
- Backpressure forhindrer overbelastning af bufferen
- Overvåg
bufferedAmount, og sæt på pause over en tærskel - Saml små meddelelser efter tid eller størrelse
- Sammenlæg tilstand, der ændrer sig hurtigt
Din realtidskanal forbliver nu stabil under belastning.
Lær WebSockets og programmering af realtidssystemer 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
- 47
Ofte stillede spørgsmål
Er lektionen “Backpressure og batching af beskeder” gratis?
Ja — hele teksten til “Backpressure og batching af beskeder” 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 WebSockets og programmering af realtidssystemer-kurset, skal du opgradere til CoddyKit PRO. WebSockets og programmering af realtidssystemer-kurset indeholder 4 lektioner i alt.
Hvad lærer jeg i “Backpressure og batching af beskeder”?
Undgå, at hurtige producenter overbelaster langsomme forbrugere, ved hjælp af backpressure-signaler og batching af beskeder over WebSockets. Du øver dig i WebSockets og programmering af realtidssystemer 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å WebSockets og programmering af realtidssystemer?
Der kræves ingen tidligere erfaring. WebSockets og programmering af realtidssystemer 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 “Backpressure og batching af beskeder”?
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 WebSockets og programmering af realtidssystemer-lektion?
Ja. Alle WebSockets og programmering af realtidssystemer-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
- Implementering af publish/subscribe-meddelelser
- Request-response over WebSockets
- Tovejs streaming og flowkontrol
- Backpressure og batching af beskeder