WebSocket — protokol komunikasi full-duplex yang menyediakan koneksi permanen antara klien dan server untuk pertukaran data secara real-time. Berbeda dengan permintaan HTTP tradisional, protokol ini menetapkan satu koneksi dan menggunakannya untuk transmisi dua arah tanpa handshake berulang. Menurut Mozilla Developer Network (2025), WebSocket mengurangi latensi hingga 50% dibandingkan dengan HTTP polling dalam aplikasi real-time.
Poin utama
WebSocket — adalah protokol komunikasi yang bekerja melalui TCP dan menyediakan saluran full-duplex antara klien dan server. Ini distandarisasi oleh IETF sebagai RFC 6455 pada tahun 2011 dan didukung oleh semua browser modern, platform mobile, dan framework server.
Berbeda dengan HTTP, di mana klien memulai permintaan dan menerima respons, WebSocket memungkinkan kedua belah pihak untuk mengirim pesan kapan saja setelah koneksi dibuat. Ini membuatnya ideal untuk skenario yang memerlukan pengiriman instan data: chat, notifikasi, pengeditan dokumen bersama.
Protokol WebSocket menggunakan port HTTP 80 atau port HTTPS 443 untuk handshake awal, setelah itu beralih ke protokolnya sendiri dengan header minimal — hanya 2 byte, bukan 800+ byte di HTTP. Fitur ini memberikan keuntungan kinerja yang signifikan pada jumlah pesan yang besar.
Koneksi WebSocket dimulai dengan permintaan HTTP Upgrade, setelah itu protokol beralih ke format frame biner. Ukuran frame bervariasi dari 2 byte hingga 2^63 byte, memungkinkan pengiriman pesan teks pendek maupun data biner besar. Fragmentasi pesan, masking data dari klien ke server, dan ping/pong untuk menjaga koneksi didukung.
Proses pembentukan koneksi WebSocket terdiri dari dua tahap: handshake dan transmisi data. Pada tahap handshake, klien mengirim permintaan HTTP dengan header Upgrade: websocket, dan server mengonfirmasi pergantian protokol dengan status 101 Switching Protocols. Setelah itu, koneksi beralih ke mode transmisi full-duplex.
Setiap pesan di WebSocket dibagi menjadi frame. Frame berisi opcode (teks, data biner, penutupan, ping/pong), panjang payload, dan kunci masking untuk data dari klien. Frame dapat difragmentasi — frame kontrol (ping/pong) dapat dikirim di antara fragmen pesan, mencegah pemutusan koneksi selama transmisi panjang.
const ws = new WebSocket('wss://example.com/chat')
ws.addEventListener('open', () => {
console.log('Koneksi dibuat')
ws.send('Halo server!')
})
ws.addEventListener('message', (event) => {
console.log('Diterima:', event.data)
})
ws.addEventListener('close', () => {
console.log('Koneksi ditutup')
})
Dalam contoh di atas, klien membuat objek WebSocket, menentukan URL aman wss://. Setelah koneksi terbuka, pesan sambutan dikirim, dan handler message menerima respons dari server. Saat penutupan, handler close diaktifkan — ini penting untuk menghubungkan kembali saat putus jaringan.
Perbedaan utama antara WebSocket dan HTTP terletak pada model interaksi. HTTP bekerja dengan skema permintaan-respons: klien memulai permintaan, server mengembalikan respons, koneksi ditutup. WebSocket sebaliknya membangun saluran permanen di mana kedua belah pihak dapat memulai transmisi kapan saja.
Untuk aplikasi yang memerlukan latensi rendah dan aliran data konstan, WebSocket jauh lebih efisien. HTTP Long Polling — alternatif di mana server menjaga permintaan tetap terbuka hingga data muncul — menciptakan beban tambahan pada server dan meningkatkan konsumsi memori karena banyak koneksi simultan.
| Parameter | WebSocket | HTTP |
|---|---|---|
| Model | Full-duplex | Permintaan-respons |
| Header | 2–14 byte | 400–800 byte |
| Koneksi permanen | Ya, satu | Tidak, baru per permintaan |
| Latensi | Rendah (1–5 ms) | Tinggi (50–200 ms) |
| Protokol | ws:// atau wss:// | http:// atau https:// |
Menurut High Performance Browser Networking (Grigorik, O’Reilly), WebSocket mengurangi latensi jaringan dalam skenario real-time sebesar 40–60% dibandingkan dengan HTTP Long Polling, dan beban server turun 3–5 kali lipat karena penghapusan handshake berulang.
Berkat latensi rendah dan komunikasi dua arah, WebSocket digunakan dalam berbagai aplikasi. Skenario utama mencakup pertukaran pesan instan, sinkronisasi status dalam game, dan transmisi data pasar dalam sistem keuangan.
WebSocket telah menjadi standar de facto untuk aplikasi chat. Platform seperti Slack, Telegram Web, dan WhatsApp Web menggunakan WebSocket untuk pengiriman pesan instan. Protokol memungkinkan pengiriman pesan teks maupun file melalui satu saluran, dan mekanisme ping/pong menjaga koneksi tetap aktif bahkan saat tidak ada aktivitas.
Game multipemain browser dan mobile memerlukan latensi minimal untuk sinkronisasi status pemain. WebSocket mengirimkan koordinat, tindakan, dan peristiwa secara real-time tanpa latensi permintaan HTTP. Framework seperti Socket.IO dan Colyseus mengabstraksi kerja tingkat rendah dengan protokol, menambahkan koneksi ulang otomatis dan ruangan.
Terminal bursa dan platform trading menggunakan WebSocket untuk menerima kuotasi secara real-time. Latensi beberapa milidetik dapat bernilai jutaan dolar, oleh karena itu API keuangan — misalnya, Binance WebSocket Streams, Coinbase Pro — menyediakan antarmuka WebSocket untuk data pasar.
Dalam pengembangan mobile, WebSocket digunakan melalui API native: URLSessionWebSocketTask di iOS dan OkHttp WebSocket di Android. Untuk Flutter ada pustaka web_socket_channel, dan untuk React Native — react-native-websocket. Perangkat IoT menggunakan WebSocket untuk mengirim telemetri dan menerima perintah kontrol, karena protokol mengonsumsi lebih sedikit energi daripada HTTP-polling terus-menerus.
Mari kita lihat contoh bagian server di Node.js dengan pustaka ws — implementasi WebSocket paling populer untuk JavaScript. Server menerima koneksi, memproses pesan, dan menyiarkannya ke semua klien yang terhubung.
const WebSocket = require('ws')
const wss = new WebSocket.Server({ port: 8080 })
wss.on('connection', (ws) => {
console.log('Klien baru terhubung')
ws.on('message', (data) => {
console.log('Diterima:', data.toString())
ws.send('Server menerima pesan Anda')
})
ws.on('close', () => {
console.log('Klien terputus')
})
})
console.log('Server WebSocket dimulai pada port 8080')
Server membuat instance WebSocket.Server pada port 8080 dan menunggu koneksi. Setiap klien baru diberikan objek ws terpisah, yang melaluinya server dapat mengirim pesan secara individual. Penyiaran pesan ke semua klien dilakukan melalui iterasi massal array koneksi. Dengan jumlah klien yang besar (lebih dari 1000), disarankan menggunakan pustaka dengan dukungan clustering seperti Socket.IO, yang menambahkan penskalaan melalui Redis dan koneksi ulang otomatis.
wss.clients.forEach((client) => {
if (client.readyState === WebSocket.OPEN) {
client.send('Pesan untuk semua peserta')
}
})
Pemeriksaan readyState sebelum pengiriman wajib dilakukan: jika klien sudah terputus, panggilan send akan menghasilkan error. Bendera WebSocket.OPEN menjamin bahwa koneksi aktif dan pesan akan dikirimkan.
Untuk aplikasi iOS mobile, WebSocket diimplementasikan melalui URLSessionWebSocketTask, tersedia sejak iOS 13. Sesi membuat tugas dengan URL protokol wss://, setelah itu metode send dan receive dipanggil. Penerimaan pesan dapat diatur melalui rekursi receive berkelanjutan, yang menunggu pesan berikutnya setelah memproses yang sebelumnya, memastikan penerimaan data terus-menerus tanpa koneksi ulang. Untuk Android digunakan OkHttp WebSocket, yang menyediakan antarmuka serupa dengan callback onOpen, onMessage, onClosing, dan onClosed, serta koneksi ulang otomatis saat putus koneksi.
Saat bekerja dengan WebSocket di aplikasi mobile, penting untuk mempertimbangkan manajemen siklus hidup: saat aplikasi masuk ke latar belakang, koneksi dapat diputus oleh sistem. Di iOS, koneksi harus dibangun kembali saat kembali ke latar depan melalui delegasi sceneDidBecomeActive. Di Android, harus menggunakan komponen Lifecycle-aware atau Service untuk menjaga koneksi. Selain itu, disarankan untuk mengimplementasikan exponential backoff saat menghubungkan kembali — meningkatkan interval antara percobaan dari 1 menjadi 30 detik, agar tidak menciptakan beban berlebihan pada server saat masalah jaringan sementara.
Pertanyaan yang sering diajukan
WebSocket membangun koneksi permanen full-duplex di mana kedua belah pihak dapat mengirim data kapan saja. HTTP bekerja dengan skema permintaan-respons, di mana setiap pertukaran memerlukan koneksi baru dan header lengkap. WebSocket menggunakan satu saluran TCP dan header hanya 2–14 byte, yang secara drastis mengurangi latensi.
WebSocket menggunakan port 80 untuk koneksi tidak aman (ws://) dan port 443 untuk koneksi aman (wss://). Ini memungkinkan melewati sebagian besar server proxy dan firewall perusahaan tanpa konfigurasi tambahan. Port 443 direkomendasikan untuk lingkungan produksi karena enkripsi TLS.
Ya, WebSocket didukung di semua platform mobile. Di iOS, kelas native URLSessionWebSocketTask tersedia sejak iOS 13. Di Android — kelas OkHttp WebSocket dan java.net.WebSocket standar. Untuk React Native ada pustaka react-native-websocket.
WebSocket Secure — versi aman dari protokol yang bekerja melalui TLS. Semua data dienkripsi seperti di HTTPS. WSS wajib untuk aplikasi produksi, terutama saat mentransmisikan token autentikasi atau data pribadi melalui WebSocket.
Alternatif utama: HTTP Long Polling (server menjaga permintaan tetap terbuka), Server-Sent Events (aliran satu arah dari server), dan WebRTC Data Channel (komunikasi peer-to-peer). Server-Sent Events lebih sederhana diimplementasikan, tetapi tidak mendukung pengiriman dari klien ke server.
Ringkasan
Kami akan mengembangkan aplikasi seluler turnkey
IT Sectr membuat aplikasi iOS dan Android untuk startup dan bisnis sejak 2017. Kami akan memberi saran dan mengusulkan solusi terbaik.
Baca juga