Подтверждение сообщений и гарантии доставки
Не допускайте незаметной потери сообщений: добавьте подтверждения, повторные попытки и идемпотентность, чтобы обеспечить надёжную доставку.
«Подтверждение сообщений и гарантии доставки» — бесплатный урок WebSockets & Realtime Systems Programming на CoddyKit. Это урок 4 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения WebSockets & Realtime Systems Programming, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс WebSockets & Realtime Systems Programming содержит 4 уроков всего.
Части этого урока еще не переведены и отображаются на английском.
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.
Изучай WebSockets & Realtime Systems Programming с ИИ-репетитором — бесплатно
Пиши и запускай код прямо в браузере, получай мгновенную помощь от ИИ-репетитора 24/7 и продолжи учиться на сайте или в приложении.
- Курсы
- 12
- Уроки
- 47
Часто задаваемые вопросы
Урок «Подтверждение сообщений и гарантии доставки» бесплатный?
Да — полный текст урока «Подтверждение сообщений и гарантии доставки» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс WebSockets & Realtime Systems Programming, подпишись на CoddyKit PRO. Курс WebSockets & Realtime Systems Programming содержит 4 уроков всего.
Чему я научусь в уроке «Подтверждение сообщений и гарантии доставки»?
Не допускайте незаметной потери сообщений: добавьте подтверждения, повторные попытки и идемпотентность, чтобы обеспечить надёжную доставку. Ты практикуешь WebSockets & Realtime Systems Programming с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать WebSockets & Realtime Systems Programming?
Предыдущий опыт не требуется. WebSockets & Realtime Systems Programming на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 4 из 4.
Сколько времени занимает урок «Подтверждение сообщений и гарантии доставки»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке WebSockets & Realtime Systems Programming?
Да. Каждый урок WebSockets & Realtime Systems Programming включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Обработка отключений и повторных подключений
- Надёжная передача и восстановление после ошибок
- Сигналы активности и поддержание соединения
- Подтверждение сообщений и гарантии доставки