Apa Itu WebSocket?

WebSocket adalah sebuah protocol komunikasi yang memungkinkan dua endpoint—biasanya antara client dan server—untuk membangun koneksi TCP yang tetap, dua arah, dan full duplex. Tujuan utama dari protokol ini adalah memberikan cara buat aplikasi berbasis browser untuk berkomunikasi dua arah tanpa harus membuka banyak koneksi HTTP. Makanya, WebSocket sering digunakan untuk komunikasi antara browser dan server web, meskipun bisa juga digunakan oleh dua endpoint lain yang mendukung protokol ini.

Protokol WebSocket ini mengatasi banyak keterbatasan yang ada di HTTP. Kalau pakai HTTP biasa, aplikasi yang butuh komunikasi dua arah, seperti instant messaging, harus melakukan banyak permintaan HTTP, dan server juga harus nge-handle banyak koneksi TCP. Cara ini jelas bikin overhead lebih besar, tambah latency, dan boros bandwidth.

WebSocket menawarkan alternatif dibanding polling terus-menerus seperti di HTTP. Dengan WebSocket, client dan server cuma perlu satu koneksi untuk komunikasi dua arah.

WebSocket pertama kali muncul dalam spesifikasi HTML5 dengan nama TCPConnection—sebagai placeholder buat API socket berbasis TCP.

Ian Hickson dan Michael Carter pertama kali mengusulkan protokol WebSocket pada tahun 2008. Kemudian, IETF menstandarisasinya dalam RFC 6455 pada tahun 2011.

Saat ini, semua browser utama udah support WebSocket. Biasanya, browser menggunakan WebSocket API buat ngejalin koneksi dengan server. API ini nyediain interface yang bisa dipakai web apps buat mulai dan ngelola koneksi WebSocket mereka.

WebSocket banyak dipakai buat aplikasi yang butuh komunikasi dua arah, seperti live chat, instant messaging, game online, dan tools kolaborasi real-time.

Membangun Koneksi WebSocket

WebSocket sering digunakan dalam infrastruktur HTTP yang sudah ada, karena mendukung proxy dan perantara HTTP. Protokol ini bekerja di port HTTP 80 dan HTTPS 443. Tapi, sebenarnya WebSocket nggak terbatas buat HTTP aja. Meskipun implementasi saat ini kebanyakan ada dalam framework HTTP, protokol ini bisa digunakan dalam berbagai cara lain buat menyederhanakan komunikasi dua arah.

Koneksi WebSocket biasanya dimulai dengan browser yang mengirimkan handshake TCP ke server. Handshake ini adalah permintaan HTTP/1.1 GET yang berisi beberapa header HTTP spesifik buat membangun koneksi WebSocket, seperti:

  • Connection. Daftar opsi koneksi. Buat WebSocket, field ini harus bernilai Upgrade.
  • Upgrade. Menunjukkan kalau koneksi harus di-upgrade ke protokol tertentu. Untuk WebSocket, nilainya harus WebSocket.
  • Sec-WebSocket-Key. String acak yang sudah dienkode dengan Base64, dipakai server buat validasi handshake WebSocket.
  • Sec-WebSocket-Version. Versi protokol, saat ini harus bernilai 13.

Setelah menerima handshake awal, server bakal ngasih respon handshake buat menyelesaikan perubahan ke protokol WebSocket. Respon ini mengandung header Sec-WebSocket-Accept, yang nunjukin apakah server setuju menerima koneksi. Nilai header ini adalah hash Base64 dari nilai Sec-WebSocket-Key yang dikirim dalam handshake awal. Ini berfungsi buat memastikan bahwa server beneran menerima koneksi.

Kalau handshake sukses, client dan server bisa mulai tukeran data dalam bentuk pesan WebSocket. Setiap pesan terdiri dari satu atau lebih frame yang mengandung tipe data yang sama. Secara umum, frame pesan WebSocket terbagi dalam tiga kategori:

  • Textual data frames. Frame berisi data teks yang dikodekan dalam format UTF-8.
  • Binary data frames. Frame berisi data biner, yang cara interpretasinya tergantung pada aplikasi.
  • Control frames. Frame yang dipakai buat sinyal tingkat protokol, misalnya buat ping endpoint lain atau buat menutup koneksi.

Ketika komunikasi pakai WebSocket, server tahu semua koneksi WebSocket yang aktif dan bisa komunikasi dengan masing-masing secara individual. Koneksi bisa dimulai dari salah satu endpoint, yang bikin WebSocket cocok buat aplikasi event-driven. Berbeda dengan HTTP standar, yang cuma memungkinkan client buat request data baru.

Selama koneksi masih terbuka, server dan client bisa saling kirim pesan kapan aja, sampai salah satu dari mereka nutup sesi. Buat nutup koneksi, salah satu endpoint cukup ngirim handshake penutupan dalam bentuk control frame.

Tinggalkan Balasan

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *