Programmering av WebSockets och system i realtid · Lektion

Meddelandebekräftelser och leveransgarantier

Säkerställ att meddelanden inte försvinner obemärkt genom att lägga till bekräftelser, omförsök och idempotens för tillförlitliga leveransgarantier.

Lektion 4 av 413 steg

Meddelandebekräftelser och leveransgarantier är en gratis lektion i Programmering av WebSockets och system i realtid på CoddyKit. Detta är lektion 4 av 4. Ni kan läsa hela lektionen gratis nedan och sedan öva praktiskt i webbläsaren med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt. Den ingår i lärvägen för Programmering av WebSockets och system i realtid, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i Programmering av WebSockets och system i realtid innehåller totalt 4 lektioner.

Meddelanden kan försvinna

Ett meddelande kan gå förlorat om socketen bryts mitt under sändningen, servern kraschar eller klienten laddas om innan meddelandet har behandlats. Utan bekräftelser vet ingen av sidorna att detta har hänt.

Nivåer för leveransgarantier

Tre vanliga garantier:

  • At-most-once: kan förlora meddelanden men duplicerar dem aldrig
  • At-least-once: förlorar aldrig meddelanden men kan duplicera dem
  • Exactly-once: förlorar aldrig och duplicerar aldrig meddelanden, vilket är svårast

Bekräftelser på applikationsnivå

WebSockets bekräftar endast leverans via transportlagret, inte att meddelandet har behandlats. För att veta att ett meddelande har hanterats måste mottagaren skicka tillbaka en uttrycklig ack.

Lägga till ett meddelande-id

Märk varje meddelande med ett unikt id så att bekräftelser kan hänvisa till det.

const msg = { id: crypto.randomUUID(), type: 'order', data };
ws.send(JSON.stringify(msg));

Skicka bekräftelsen

Mottagaren svarar med en bekräftelse som innehåller det ursprungliga id:t när meddelandet har behandlats säkert.

ws.send(JSON.stringify({ type: 'ack', id: msg.id }));

Spåra obekräftade meddelanden

Avsändaren behåller en mappning över meddelanden under behandling tills deras bekräftelser anländer.

const pending = new Map();
pending.set(msg.id, msg);

Försöka igen efter timeout

Om ingen bekräftelse anländer inom en viss tidsgräns skickar ni meddelandet igen. På detta sätt uppnås leverans med garantin at-least-once.

setTimeout(() => {
  if (pending.has(msg.id)) ws.send(JSON.stringify(msg));
}, 3000);

Problemet med dubbletter

Nya försök kan leverera samma meddelande två gånger, till exempel om bekräftelsen förlorades men inte meddelandet. At-least-once innebär därför att mottagaren kan se dubbletter.

Idempotens till undsättning

Gör behandlingen idempotent: att hantera samma id två gånger ska ha samma effekt som att hantera det en gång. Spåra redan sedda id:n och ignorera upprepningar.

const seen = new Set();
if (seen.has(msg.id)) return;
seen.add(msg.id);
process(msg);

Närma sig exactly-once

Det går inte att garantera äkta exactly-once från början till slut, men leverans med at-least-once tillsammans med idempotent hantering ger samma praktiska resultat, vilket är vad de flesta system använder.

Bästa praxis

Bygg tillförlitlig leverans:

  • Märk meddelanden med unika id:n
  • Kräv bekräftelser på applikationsnivå
  • Försök skicka obekräftade meddelanden igen efter en timeout
  • Gör behandlingen idempotent för att hantera dubbletter

Snabbtest

Testa era kunskaper om meddelandeleverans.

Sammanfattning

Ni lade till leveransgarantier i meddelanden i realtid:

  • Förstå at-most-once, at-least-once och exactly-once
  • Använd meddelande-id:n och bekräftelser på applikationsnivå
  • Försök skicka obekräftade meddelanden igen
  • Kombinera at-least-once med idempotens

Ert system förlorar inte längre meddelanden i tysthet.

Gratis att börja

Lär dig Programmering av WebSockets och system i realtid med en AI-lärare – gratis

Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.

Kurser
12
Lektioner
47

Vanliga frågor

Är lektionen ”Meddelandebekräftelser och leveransgarantier” gratis?

Ja – hela texten till ”Meddelandebekräftelser och leveransgarantier” kan läsas gratis här på webben. Om Ni vill öva interaktivt med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt och låsa upp resten av kursen i Programmering av WebSockets och system i realtid, kan Ni uppgradera till CoddyKit PRO. Kursen i Programmering av WebSockets och system i realtid innehåller totalt 4 lektioner.

Vad lär jag mig i ”Meddelandebekräftelser och leveransgarantier”?

Säkerställ att meddelanden inte försvinner obemärkt genom att lägga till bekräftelser, omförsök och idempotens för tillförlitliga leveransgarantier. Ni övar på Programmering av WebSockets och system i realtid med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.

Behöver jag någon erfarenhet för att börja lära mig Programmering av WebSockets och system i realtid?

Du behöver inga förkunskaper. Utbildningen i Programmering av WebSockets och system i realtid på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 4 av 4.

Hur lång tid tar lektionen ”Meddelandebekräftelser och leveransgarantier”?

De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.

Kan jag skriva och köra kod i den här Programmering av WebSockets och system i realtid-lektionen?

Ja. Varje Programmering av WebSockets och system i realtid-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.

Alla lektioner i den här kursen

  1. Hantera frånkopplingar och återanslutningar
  2. Robust felpropagering och återställning
  3. Heartbeat och Keep-Alive
  4. Meddelandebekräftelser och leveransgarantier
← Tillbaka till Programmering av WebSockets och system i realtid