Programmeren van WebSockets en realtime-systemen · Les

Berichtbevestiging en leveringsgaranties

Voorkom dat berichten stilletjes verloren gaan door acknowledgements, retries en idempotency toe te voegen voor betrouwbare leveringsgaranties.

Les 4 van 413 stappen

Berichtbevestiging en leveringsgaranties is een gratis Programmeren van WebSockets en realtime-systemen-les op CoddyKit. Dit is les 4 van 4. Je kunt de volledige les hieronder gratis lezen en daarna in de browser praktisch oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is. Deze les maakt deel uit van het leertraject Programmeren van WebSockets en realtime-systemen. Je voortgang wordt gesynchroniseerd op het web en in de CoddyKit-app. De cursus Programmeren van WebSockets en realtime-systemen bevat in totaal 4 lessen.

Berichten kunnen verdwijnen

Een bericht kan verloren gaan als de socket tijdens het verzenden wegvalt, de server crasht of de client opnieuw wordt geladen voordat het bericht is verwerkt. Zonder bevestigingen weet geen van beide kanten dat dit is gebeurd.

Niveaus van leveringsgarantie

Drie veelvoorkomende garanties:

  • Hoogstens één keer: kan verloren gaan, wordt nooit gedupliceerd
  • Minstens één keer: gaat nooit verloren, kan worden gedupliceerd
  • Precies één keer: gaat nooit verloren en wordt nooit gedupliceerd (het moeilijkst)

Bevestigingen op applicatieniveau

WebSockets bevestigen alleen de levering via het transport, niet de verwerking. Om te weten of een bericht is verwerkt, moet de ontvanger expliciet een bevestiging terugsturen.

Een bericht-id toevoegen

Voorzie elk bericht van een unieke id, zodat bevestigingen ernaar kunnen verwijzen.

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

De bevestiging versturen

De ontvanger antwoordt met een bevestiging met daarin de oorspronkelijke id zodra het bericht veilig is verwerkt.

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

Berichten zonder bevestiging bijhouden

De verzender houdt een map bij van berichten die nog worden verwerkt totdat hun bevestiging binnenkomt.

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

Opnieuw proberen na een time-out

Als er binnen een time-out geen bevestiging binnenkomt, verstuur je het bericht opnieuw. Zo bereik je levering van minstens één keer.

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

Het probleem van duplicaten

Nieuwe pogingen kunnen hetzelfde bericht twee keer afleveren, bijvoorbeeld wanneer de bevestiging verloren is gegaan en niet het bericht. Levering van minstens één keer betekent daarom dat de ontvanger duplicaten kan zien.

Idempotentie als oplossing

Maak de verwerking idempotent: twee keer hetzelfde id verwerken heeft hetzelfde effect als één keer. Houd geziene id's bij en negeer herhalingen.

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

Precies-één-keer benaderen

Je kunt precies-één-keer niet end-to-end garanderen, maar levering van minstens één keer in combinatie met idempotente verwerking geeft in de praktijk hetzelfde resultaat. Dat is wat de meeste systemen gebruiken.

Beste praktijken

Bouw betrouwbare levering:

  • Voorzie berichten van unieke id's
  • Vereis bevestigingen op applicatieniveau
  • Probeer berichten zonder bevestiging opnieuw binnen een time-out
  • Maak de verwerking idempotent om duplicaten op te vangen

Korte controle

Test je kennis van berichtlevering.

Samenvatting

Je hebt leveringsgaranties toegevoegd aan realtimeberichten:

  • Begrijp hoogstens-één-keer, minstens-één-keer en precies-één-keer
  • Gebruik bericht-id's en bevestigingen op applicatieniveau
  • Probeer berichten zonder bevestiging opnieuw
  • Combineer levering van minstens één keer met idempotentie

Je systeem verliest nu niet meer stilletjes berichten.

Gratis beginnen

Leer Programmeren van WebSockets en realtime-systemen met een AI-tutor — gratis

Schrijf echte code en voer die uit in je browser, krijg direct hulp van een AI-tutor die 24/7 beschikbaar is en ga verder waar je gebleven bent op het web of in de app.

Cursussen
12
Lessen
47

Veelgestelde vragen

Is de les “Berichtbevestiging en leveringsgaranties” gratis?

Ja — de volledige tekst van “Berichtbevestiging en leveringsgaranties” kun je hier gratis op het web lezen. Als je interactief wilt oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is, en de rest van de cursus Programmeren van WebSockets en realtime-systemen wilt ontgrendelen, kun je upgraden naar CoddyKit PRO. De cursus Programmeren van WebSockets en realtime-systemen bevat in totaal 4 lessen.

Wat leer ik in “Berichtbevestiging en leveringsgaranties”?

Voorkom dat berichten stilletjes verloren gaan door acknowledgements, retries en idempotency toe te voegen voor betrouwbare leveringsgaranties. Je oefent met Programmeren van WebSockets en realtime-systemen door code rechtstreeks in de browser uit te voeren. Een AI-begeleider die 24/7 beschikbaar is beantwoordt je vragen terwijl je de les doorwerkt.

Heb ik ervaring nodig om met Programmeren van WebSockets en realtime-systemen te beginnen?

Ervaring vooraf is niet nodig. Programmeren van WebSockets en realtime-systemen op CoddyKit is opgebouwd voor beginners tot gevorderden, zodat je hier of bij het begin kunt starten en in je eigen tempo kunt leren. Dit is les 4 van 4.

Hoe lang duurt de les “Berichtbevestiging en leveringsgaranties”?

De meeste lessen van CoddyKit duren ongeveer 5–10 minuten. Elke les is kort en interactief, zodat je gestaag vooruitgaat en op het web en in de app precies verdergaat waar je was gebleven.

Kan ik code schrijven en uitvoeren in deze les over Programmeren van WebSockets en realtime-systemen?

Ja. Elke les over Programmeren van WebSockets en realtime-systemen bevat een ingebouwde code-editor, zodat je rechtstreeks in je browser echte code kunt schrijven en uitvoeren en direct feedback van AI krijgt — lokale installatie is niet nodig.

Alle lessen in deze cursus

  1. Verbindingen verbreken en herstellen
  2. Robuuste foutdoorgifte en herstel
  3. Heartbeats en keep-alives
  4. Berichtbevestiging en leveringsgaranties
← Terug naar Programmeren van WebSockets en realtime-systemen