WebSockets & Realtime Systems Programming · Lekcja

Potwierdzanie wiadomości i gwarancje dostarczenia

Zapewnij, że wiadomości nie zaginą po cichu, dodając potwierdzenia, ponowienia prób i idempotencję, aby uzyskać niezawodne gwarancje dostarczenia.

Lekcja 4 z 413 kroki

Potwierdzanie wiadomości i gwarancje dostarczenia to bezpłatna lekcja WebSockets & Realtime Systems Programming na CoddyKit. To lekcja 4 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej WebSockets & Realtime Systems Programming, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs WebSockets & Realtime Systems Programming zawiera 4 lekcji w sumie.

Części tej lekcji nie zostały jeszcze przetłumaczone i są wyświetlane po angielsku.

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.

Bezpłatny start

Ucz się WebSockets & Realtime Systems Programming dzięki korepetycjom AI — za darmo

Pisz i uruchamiaj kod w przeglądarce, otrzymuj natychmiastową pomoc od korepetytora AI dostępnego 24/7 i kontynuuj naukę w sieci lub w aplikacji.

Kursy
12
Lekcje
47

Często zadawane pytania

Czy lekcja „Potwierdzanie wiadomości i gwarancje dostarczenia” jest bezpłatna?

Tak — pełny tekst „Potwierdzanie wiadomości i gwarancje dostarczenia” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu WebSockets & Realtime Systems Programming, przejdź na CoddyKit PRO. Kurs WebSockets & Realtime Systems Programming zawiera 4 lekcji w sumie.

Co nauczysz się w „Potwierdzanie wiadomości i gwarancje dostarczenia”?

Zapewnij, że wiadomości nie zaginą po cichu, dodając potwierdzenia, ponowienia prób i idempotencję, aby uzyskać niezawodne gwarancje dostarczenia. Ćwiczysz WebSockets & Realtime Systems Programming z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć WebSockets & Realtime Systems Programming?

Nie wymagamy żadnego doświadczenia. WebSockets & Realtime Systems Programming w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 4 z 4.

Ile czasu zajmuje lekcja „Potwierdzanie wiadomości i gwarancje dostarczenia”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji WebSockets & Realtime Systems Programming?

Tak. Każda lekcja WebSockets & Realtime Systems Programming zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Obsługa rozłączeń i ponownych połączeń
  2. Solidne propagowanie błędów i odzyskiwanie po awariach
  3. Heartbeat i utrzymywanie połączeń
  4. Potwierdzanie wiadomości i gwarancje dostarczenia
← Powrót do WebSockets & Realtime Systems Programming