WebSockets & Realtime Systems Programming · Leçon

Accusés de réception et garanties de livraison

Assurez-vous que les messages ne sont pas perdus silencieusement en ajoutant des accusés de réception, des nouvelles tentatives et l’idempotence afin de garantir une livraison fiable.

Leçon 4 sur 413 étapes

Accusés de réception et garanties de livraison est une leçon WebSockets & Realtime Systems Programming gratuite sur CoddyKit. Ceci est la leçon 4 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage WebSockets & Realtime Systems Programming, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours WebSockets & Realtime Systems Programming comprend 4 leçons au total.

Certaines parties de cette leçon n'ont pas encore été traduites et s'affichent en anglais.

Messages Can Vanish

A message can be lost if the socket drops mid-send, the server crashes, or the client reloads before processing. Without acknowledgements, neither side knows it happened.

Delivery Guarantee Levels

Three common guarantees:

  • At-most-once: may lose, never duplicate
  • At-least-once: never lose, may duplicate
  • Exactly-once: never lose, never duplicate (hardest)

Application-Level Acks

WebSockets only confirm transport delivery, not processing. To know a message was handled, the receiver must send an explicit ack back.

Adding a Message Id

Tag each message with a unique id so acks can reference it.

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

Sending the Ack

The receiver replies with an ack carrying the original id once it has safely processed the message.

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

Tracking Unacked Messages

The sender keeps a map of in-flight messages until their ack arrives.

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

Retrying on Timeout

If no ack arrives within a timeout, resend the message. This is how at-least-once delivery is achieved.

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

The Duplicate Problem

Retries can deliver the same message twice (e.g. the ack was lost, not the message). At-least-once therefore implies the receiver may see duplicates.

Idempotency to the Rescue

Make processing idempotent: handling the same id twice has the same effect as once. Track seen ids and ignore repeats.

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

Approaching Exactly-Once

True exactly-once is impossible to guarantee end-to-end, but at-least-once delivery plus idempotent handling gives the same practical result, which is what most systems use.

Best Practices

Build reliable delivery:

  • Tag messages with unique ids
  • Require application-level acks
  • Retry unacked messages with a timeout
  • Make processing idempotent to absorb duplicates

Quick Check

Test your delivery knowledge.

Recap

You added delivery guarantees to realtime messaging:

  • Understand at-most/at-least/exactly-once
  • Use message ids and application-level acks
  • Retry unacked messages
  • Combine at-least-once with idempotency

Your system no longer silently loses messages.

Gratuit pour commencer

Apprends WebSockets & Realtime Systems Programming avec un tuteur IA — gratuit

Écris et exécute du vrai code dans ton navigateur, obtiens de l'aide instantanée d'un tuteur IA disponible 24h/24, et reprends là où tu t'es arrêté sur le web ou dans l'app.

Cours
12
Leçons
47

Questions Fréquemment Posées

La leçon « Accusés de réception et garanties de livraison » est-elle gratuite ?

Oui — le texte complet de « Accusés de réception et garanties de livraison » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours WebSockets & Realtime Systems Programming, passe à CoddyKit PRO. Le cours WebSockets & Realtime Systems Programming comprend 4 leçons au total.

Qu'est-ce que j'apprendrai dans « Accusés de réception et garanties de livraison » ?

Assurez-vous que les messages ne sont pas perdus silencieusement en ajoutant des accusés de réception, des nouvelles tentatives et l’idempotence afin de garantir une livraison fiable. Tu pratiques WebSockets & Realtime Systems Programming avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.

Dois-je avoir de l'expérience pour commencer WebSockets & Realtime Systems Programming ?

Aucune expérience préalable n'est requise. WebSockets & Realtime Systems Programming sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 4 sur 4.

Combien de temps prend la leçon « Accusés de réception et garanties de livraison » ?

La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.

Peux-tu écrire et exécuter du code dans cette leçon WebSockets & Realtime Systems Programming ?

Oui. Chaque leçon WebSockets & Realtime Systems Programming inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.

Toutes les leçons de ce cours

  1. Gestion des déconnexions et reconnexions
  2. Propagation et récupération robustes des erreurs
  3. Signaux de maintien et maintien des connexions
  4. Accusés de réception et garanties de livraison
← Retour à WebSockets & Realtime Systems Programming