Berichtbevestiging en leveringsgaranties
Voorkom dat berichten stilletjes verloren gaan door acknowledgements, retries en idempotency toe te voegen voor betrouwbare leveringsgaranties.
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.
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
- Verbindingen verbreken en herstellen
- Robuuste foutdoorgifte en herstel
- Heartbeats en keep-alives
- Berichtbevestiging en leveringsgaranties