Episode ini membedah WebSocket API bawaan browser: membuat instance, empat event handler, method send dan close, serta properti readyState dan bufferedAmount, dilengkapi pola reconnection sederhana.

Semua konsep protokol yang kita bedah di episode 2 dan 3 kini memiliki wujud praktis: WebSocket API bawaan browser. Kalian tidak perlu install library apa pun — setiap browser modern sudah mengimplementasikan RFC 6455.
Episode 4 mengajak kalian menguasai API ini dari awal: membuat instance WebSocket, mendaftarkan empat event handler, memakai method send dan close, membaca properti readyState dan bufferedAmount, hingga menyusun logika reconnection. Di akhir episode kalian punya klien WebSocket utuh yang siap diajak bicara dengan server mana pun.
Membuka koneksi cukup satu baris:
const ws = new WebSocket("wss://example.com/ws");
const wsChat = new WebSocket("wss://example.com/chat", ["chat-v1", "chat-v2"]);Parameter kedua adalah daftar subprotokol yang diminta. new WebSocket(url, protocols) membuat instance dan langsung memulai handshake. Server boleh memilih satu dari daftar itu lewat header Sec-WebSocket-Protocol.
Segera setelah instance dibuat:
ws.readyState berisi state koneksi (0 sampai 3).ws.bufferedAmount berisi jumlah byte yang belum terkirim.ws.url menampilkan URL final setelah redirect.Dipanggil saat handshake selesai dan koneksi siap dipakai:
ws.onopen = () => {
console.log("koneksi terbuka");
ws.send("halo server");
};Pastikan semua pesan awal dikirim dari dalam onopen — mengirim sebelum event ini bisa gagal karena koneksi belum OPEN.
Dipanggil setiap kali frame data tiba. Ini jantung dari aplikasi real-time:
ws.onmessage = (event) => {
const data = event.data;
if (typeof data === "string") {
renderText(data);
} else {
renderBinary(data);
}
};event.data bisa berupa string untuk text frame, atau Blob dan ArrayBuffer untuk binary frame. Perilaku default binary adalah Blob; bisa diubah dengan ws.binaryType = "arraybuffer".
Error dan penutupan perlu ditangani terpisah:
ws.onerror = (event) => {
console.error("terjadi error", event);
};
ws.onclose = (event) => {
console.log("koneksi ditutup", event.code, event.reason);
};onclose menerima objek dengan event.code dan event.reason. Perhatikan: onerror tidak selalu diikuti penutupan, tapi onclose hampir selalu datang setelah error fatal.
Dua method utama:
ws.send("pesan teks");
ws.send(new Blob([data]));
ws.send(new Uint8Array([1, 2, 3]));
ws.close(1000, "tutup normal");ws.send() menerima string, Blob, atau ArrayBufferView. ws.close(code, reason) memulai penutupan yang sopan: close frame dikirim, lalu state bergerak ke CLOSED.
Kedua properti ini penting untuk debugging:
function kirimPelan(ws, teks) {
ws.send(teks);
if (ws.bufferedAmount > 0) {
console.log("masih ada data tertunda:", ws.bufferedAmount);
}
}ws.bufferedAmount memberi tahu berapa byte yang belum sampai ke jaringan — sinyal awal adanya backpressure yang akan kita bahas di episode 13.
Koneksi WebSocket bisa putus kapan saja. Pola minimum yang wajib ada:
let ws;
function hubungkan() {
ws = new WebSocket("wss://example.com/ws");
ws.onclose = () => {
setTimeout(hubungkan, 3000);
};
}
hubungkan();Memanggil hubungkan() dari dalam onclose dengan setTimeout(hubungkan, 3000) adalah inti reconnection. Episode 12 akan memperlengkapi pola ini dengan exponential backoff dan batas percobaan.
Semua browser modern mendukung WebSocket, tapi kode defensif tetap layak:
if (window.WebSocket) {
// jalan normal
} else {
// fallback ke polling atau SSE
}Cek window.WebSocket sebelum memakai API. Untuk browser lama, fallback yang umum adalah SSE atau long polling — persis seperti pilihan di episode 1.
Warning
Di mobile, koneksi WebSocket lebih sering mati karena pergantian jaringan. Selalu pasang reconnection logic dan kode state recovery seperti episode 12, bukan hanya handler onopen.
Episode 4 membekali kalian klien WebSocket native: pembuatan instance, empat event handler, method send dan close, properti readyState dan bufferedAmount, serta pola reconnection sederhana untuk menahan putusnya koneksi.
Inti yang harus dibawa pulang:
Di episode 5 selanjutnya kita pindah ke sisi server: WebSocket server dengan Node.js dan library ws — instalasi, pembuatan server, event connection, broadcast, hingga manajemen klien yang terhubung. Kalian akan memiliki pasangan lengkap klien dan server.