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:
| ReadyState | Nilai | Deskripsi |
|---|---|---|
| CONNECTING | 0 | Koneksi sedang dalam proses pembentukan. |
| OPEN | 1 | Koneksi berhasil dan siap mengirim data. |
| CLOSING | 2 | Koneksi sedang dalam proses penutupan. |
| CLOSED | 3 | Koneksi 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
- Cek Protokol: Pastikan menggunakan
wss://untuk produksi guna menjamin enkripsi TLS/SSL. - Handling Reconnection: WebSocket tidak melakukan auto-reconnect secara native. Implementasikan logika exponential backoff pada event
oncloseuntuk menjaga stabilitas koneksi. - Heartbeat/Ping-Pong: Beberapa load balancer akan memutus koneksi idle. Kirim pesan 'ping' secara berkala (misal setiap 30 detik) untuk menjaga koneksi tetap aktif.
- Cross-Origin: WebSocket tidak dibatasi oleh kebijakan Same-Origin Policy (SOP) seperti AJAX, namun server harus memvalidasi header
Originuntuk mencegah serangan CSRF.