Bekræftelse af beskeder og leveringsgarantier
Sørg for, at beskeder ikke går tabt ubemærket, ved at tilføje bekræftelser, retries og idempotens for at opnå pålidelige leveringsgarantier.
Bekræftelse af beskeder og leveringsgarantier 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.
Meddelelser kan forsvinde
En meddelelse kan gå tabt, hvis socketen afbrydes midt under afsendelsen, serveren går ned, eller klienten genindlæses, før meddelelsen behandles. Uden kvitteringer ved ingen af siderne, om det skete.
Niveauer for leveringsgaranti
Tre almindelige garantier:
- Højst én gang: Kan gå tabt, men bliver aldrig duplikeret
- Mindst én gang: Går aldrig tabt, men kan blive duplikeret
- Præcis én gang: Går aldrig tabt og bliver aldrig duplikeret (sværest)
Kvitteringer på applikationsniveau
WebSockets bekræfter kun levering via transporten, ikke behandling. Hvis du vil vide, om en meddelelse er blevet håndteret, skal modtageren sende en eksplicit kvittering tilbage.
Tilføjelse af et meddelelses-id
Mærk hver meddelelse med et entydigt id, så kvitteringer kan henvise til det.
const msg = { id: crypto.randomUUID(), type: 'order', data };
ws.send(JSON.stringify(msg));Afsendelse af kvitteringen
Modtageren svarer med en kvittering, der indeholder det oprindelige id, når meddelelsen er behandlet sikkert.
ws.send(JSON.stringify({ type: 'ack', id: msg.id }));Sporing af meddelelser uden kvittering
Afsenderen opbevarer en oversigt over meddelelser under behandling, indtil deres kvittering ankommer.
const pending = new Map();
pending.set(msg.id, msg);Nyt forsøg efter timeout
Hvis der ikke kommer en kvittering inden for en timeout, skal du sende meddelelsen igen. Det er sådan, levering mindst én gang opnås.
setTimeout(() => {
if (pending.has(msg.id)) ws.send(JSON.stringify(msg));
}, 3000);Problemet med dubletter
Nye forsøg kan levere den samme meddelelse to gange, f.eks. hvis kvitteringen gik tabt, men ikke meddelelsen. Levering mindst én gang betyder derfor, at modtageren kan se dubletter.
Idempotens som løsning
Gør behandlingen idempotent: At håndtere det samme id to gange skal have samme effekt som at håndtere det én gang. Spor allerede sete id'er, og ignorér gentagelser.
const seen = new Set();
if (seen.has(msg.id)) return;
seen.add(msg.id);
process(msg);På vej mod præcis én gang
Det er umuligt at garantere ægte levering præcis én gang fra ende til anden, men levering mindst én gang kombineret med idempotent behandling giver samme praktiske resultat, hvilket de fleste systemer anvender.
Bedste praksis
Byg pålidelig levering:
- Mærk meddelelser med entydige id'er
- Kræv kvitteringer på applikationsniveau
- Prøv igen med meddelelser uden kvittering efter en timeout
- Gør behandlingen idempotent, så dubletter håndteres
Hurtigt tjek
Test din viden om levering.
Opsummering
Du har føjet leveringsgarantier til realtidsmeddelelser:
- Forstå højst én gang, mindst én gang og præcis én gang
- Brug meddelelses-id'er og kvitteringer på applikationsniveau
- Prøv igen med meddelelser uden kvittering
- Kombinér levering mindst én gang med idempotens
Dit system mister ikke længere meddelelser ubemærket.
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 “Bekræftelse af beskeder og leveringsgarantier” gratis?
Ja — hele teksten til “Bekræftelse af beskeder og leveringsgarantier” 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 “Bekræftelse af beskeder og leveringsgarantier”?
Sørg for, at beskeder ikke går tabt ubemærket, ved at tilføje bekræftelser, retries og idempotens for at opnå pålidelige leveringsgarantier. 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 “Bekræftelse af beskeder og leveringsgarantier”?
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
- Håndtering af afbrydelser og genforbindelser
- Robust fejlsignalering og gendannelse
- Heartbeats og keep-alive
- Bekræftelse af beskeder og leveringsgarantier