WebSocket API: Referensi Lengkap Protokol Komunikasi Real-Time

Definisi dan Mekanisme WebSocket

WebSocket API adalah antarmuka pemrograman aplikasi yang menyediakan protokol komunikasi full-duplex melalui satu koneksi TCP tunggal. Berbeda dengan HTTP yang bersifat request-response, WebSocket memungkinkan server mengirim data ke klien tanpa harus menunggu permintaan (push notification), menjadikannya standar industri untuk aplikasi real-time seperti chat, dashboard finansial, dan game multiplayer.

Siklus Hidup Koneksi

Koneksi WebSocket dimulai dengan proses handshake HTTP yang kemudian di-upgrade ke protokol WebSocket (ws:// atau wss://). Berikut adalah tabel status koneksi:

ReadyStateNilaiDeskripsi
CONNECTING0Koneksi sedang dalam proses pembentukan.
OPEN1Koneksi berhasil dan siap mengirim data.
CLOSING2Koneksi sedang dalam proses penutupan.
CLOSED3Koneksi telah tertutup atau gagal dibuka.

Implementasi Dasar

Berikut adalah sintaks standar untuk menginisialisasi koneksi dan menangani event utama dalam JavaScript:

// 1. Inisialisasi koneksi
const socket = new WebSocket('wss://echo.websocket.org');

// 2. Event saat koneksi terbuka
socket.onopen = (event) => {
  socket.send('Halo Server!');
};

// 3. Event saat menerima pesan
socket.onmessage = (event) => {
  console.log('Pesan dari server:', event.data);
};

// 4. Event saat terjadi error
socket.onerror = (error) => {
  console.error('WebSocket Error:', error);
};

// 5. Event saat koneksi ditutup
socket.onclose = (event) => {
  console.log('Koneksi ditutup');
};

Metode dan Properti Utama

Dalam pengembangan aplikasi, Anda akan sering berinteraksi dengan properti dan metode berikut:

  • socket.send(data): Mengirim data ke server. Mendukung string, Blob, atau ArrayBuffer.
  • socket.close(code, reason): Menutup koneksi secara eksplisit.
  • socket.bufferedAmount: Properti read-only yang menunjukkan jumlah data (dalam byte) yang diantrekan dalam buffer tetapi belum dikirim ke jaringan.
  • socket.binaryType: Menentukan format data biner yang diterima (blob atau arraybuffer).

Tips Troubleshooting Lapangan

  1. Cek Protokol: Pastikan menggunakan wss:// untuk produksi guna menjamin enkripsi TLS/SSL.
  2. Handling Reconnection: WebSocket tidak melakukan auto-reconnect secara native. Implementasikan logika exponential backoff pada event onclose untuk menjaga stabilitas koneksi.
  3. Heartbeat/Ping-Pong: Beberapa load balancer akan memutus koneksi idle. Kirim pesan 'ping' secara berkala (misal setiap 30 detik) untuk menjaga koneksi tetap aktif.
  4. Cross-Origin: WebSocket tidak dibatasi oleh kebijakan Same-Origin Policy (SOP) seperti AJAX, namun server harus memvalidasi header Origin untuk mencegah serangan CSRF.