Konfirmasi Pesan dan Jaminan Pengiriman
Pastikan pesan tidak hilang tanpa diketahui dengan menambahkan konfirmasi, percobaan ulang, dan idempotensi untuk mencapai jaminan pengiriman yang andal.
Konfirmasi Pesan dan Jaminan Pengiriman adalah pelajaran WebSockets & Realtime Systems Programming gratis di CoddyKit. Ini adalah pelajaran 4 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar WebSockets & Realtime Systems Programming, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus WebSockets & Realtime Systems Programming mencakup 4 pelajaran total.
Bagian dari pelajaran ini belum diterjemahkan dan ditampilkan dalam bahasa Inggris.
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.
Belajar WebSockets & Realtime Systems Programming dengan tutor AI — gratis
Tulis dan jalankan kode asli di browser kamu, dapatkan bantuan instan dari tutor AI 24/7, dan lanjutkan di mana kamu tinggalkan di web atau aplikasi.
- Kursus
- 12
- Pelajaran
- 47
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Konfirmasi Pesan dan Jaminan Pengiriman” gratis?
Ya — teks lengkap “Konfirmasi Pesan dan Jaminan Pengiriman” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus WebSockets & Realtime Systems Programming, upgrade ke CoddyKit PRO. Kursus WebSockets & Realtime Systems Programming mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Konfirmasi Pesan dan Jaminan Pengiriman”?
Pastikan pesan tidak hilang tanpa diketahui dengan menambahkan konfirmasi, percobaan ulang, dan idempotensi untuk mencapai jaminan pengiriman yang andal. Kamu berlatih WebSockets & Realtime Systems Programming dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai WebSockets & Realtime Systems Programming?
Tidak diperlukan pengalaman sebelumnya. WebSockets & Realtime Systems Programming di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 4 dari 4.
Berapa lama pelajaran “Konfirmasi Pesan dan Jaminan Pengiriman” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran WebSockets & Realtime Systems Programming ini?
Ya. Setiap pelajaran WebSockets & Realtime Systems Programming menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Menangani Pemutusan dan Penyambungan Kembali
- Propagasi dan Pemulihan Kesalahan yang Tangguh
- Sinyal Detak dan Penjaga Koneksi
- Konfirmasi Pesan dan Jaminan Pengiriman