𝗠𝗲𝗺𝗯𝗮𝗻𝗴𝘂𝗻 𝗔𝗽𝗹𝗶𝗸𝗮𝘀𝗶 𝗥𝗲𝗮𝗹-𝗧𝗶𝗺𝗲 𝗱𝗲𝗻𝗴𝗮𝗻 𝗪𝗲𝗯𝗦𝗼𝗰𝗸𝗲𝘁𝘀
Polling itu buruk untuk aplikasi Anda.
Saya pernah membangun widget chat menggunakan AJAX polling. Saya mengatur aplikasi untuk meminta pesan baru ke server setiap detik. Itu berhasil, tetapi lambat. UI terasa lambat (laggy). Server bekerja terlalu keras. Sebagian besar permintaan mengembalikan data kosong. Rasanya seperti mencoba mengisi bak mandi dengan sendok teh.
WebSockets mengubah hal ini.
Alih-alih permintaan terus-menerus, Anda membuka satu koneksi persisten. Ini memungkinkan aliran data dua arah. Server dapat mendorong data ke klien secara instan. Klien dapat mengirim data ke server secara instan.
Mengapa menggunakan WebSockets?
• Latensi turun dari ratusan milidetik menjadi puluhan milidetik. • Beban server menjadi dapat diprediksi. • Anda menghemat bandwidth dengan menghapus header HTTP yang berulang. • Ini berfungsi untuk chat, notifikasi langsung, dan game multiplayer.
Cara kerjanya:
Koneksi dimulai dengan permintaan upgrade HTTP. Jika server setuju, ia akan mengirimkan kode status 101. Setelah itu, Anda menggunakan protokol biner mentah atau teks. Tidak ada lagi cookie atau header yang memperlambat Anda.
Jebakan umum yang harus dihindari:
- Koneksi terputus: Jaringan bisa gagal. Anda harus menerapkan strategi percobaan ulang seperti exponential backoff.
- Kebocoran memori: Selalu tutup socket Anda saat pengguna pergi. Koneksi zombie memakan memori server.
- Loop pesan: Saat melakukan broadcasting, lewati pengirim asli. Jika tidak, pengguna akan melihat pesannya sendiri dua kali.
- Koneksi idle: Beberapa proxy menutup koneksi yang diam. Gunakan ping/pong heartbeat untuk menjaga socket tetap hidup.
Berhentilah bertanya ke server apakah ada sesuatu yang berubah. Mulailah menjaga jalur tetap terbuka sehingga Anda dapat berbicara kapan pun dibutuhkan.
Tantangan Anda:
Ambil contoh chat dasar. Tambahkan indikator "sedang mengetik...". Deploy ke host seperti Render atau Fly.io. Begitu Anda melihat indikator tersebut bergerak secara real-time tanpa polling, Anda telah naik level.