WebSocket vs Server-Sent Events vs Long Polling vs WebRTC vs WebTransport
- Dalam aplikasi web real-time modern, kemampuan mengirim event dari server ke klien adalah hal yang esensial.
- Kebutuhan ini mendorong berkembangnya berbagai metode, masing-masing dengan kelebihan dan kekurangannya sendiri.
- Pada awalnya, long polling adalah satu-satunya opsi yang tersedia, lalu kemudian hadir WebSocket sebagai solusi yang lebih tangguh untuk komunikasi dua arah.
- Setelah WebSocket, hadir Server-Sent Events (SSE) sebagai metode yang lebih sederhana untuk komunikasi satu arah dari server ke klien.
- Protokol WebTransport menawarkan pendekatan yang lebih efisien, fleksibel, dan skalabel, serta tampak akan membawa inovasi lebih jauh di bidang ini.
- Untuk kasus penggunaan tertentu, WebRTC juga dapat dipertimbangkan untuk event server-klien.
Apa itu long polling?
- Long polling adalah teknik “hack” pertama yang memungkinkan metode messaging server-klien dapat digunakan di browser melalui HTTP.
- Berbeda dari polling tradisional, di mana klien secara berkala meminta data ke server, long polling membuat koneksi ke server tetap terbuka sampai data baru tersedia.
- Saat server memiliki informasi baru, server mengirim respons ke klien lalu menutup koneksi.
- Klien segera memulai permintaan baru setelah menerima respons dari server, dan proses ini terus berulang.
- Metode ini memungkinkan pembaruan data yang lebih cepat serta mengurangi traffic jaringan dan beban server yang tidak perlu.
- Namun, metode ini tetap dapat menimbulkan latensi komunikasi dan kurang efisien dibanding teknologi real-time lain seperti WebSocket.
Apa itu WebSocket?
- WebSocket menyediakan kanal komunikasi full-duplex melalui satu koneksi persisten antara klien dan server.
- Teknologi ini memungkinkan pertukaran data antara browser dan server tanpa overhead siklus request-response HTTP, sehingga cocok untuk transmisi data real-time.
- WebSocket merupakan kemajuan besar dibanding HTTP tradisional; setelah koneksi terbentuk, kedua sisi dapat mengirim data secara independen, sehingga ideal untuk skenario yang membutuhkan latensi rendah dan pembaruan berfrekuensi tinggi.
Apa itu Server-Sent Events?
- Server-Sent Events (SSE) menyediakan metode standar untuk mendorong pembaruan dari server ke klien melalui HTTP.
- Berbeda dari WebSocket, SSE hanya dirancang untuk komunikasi satu arah dari server ke klien, sehingga ideal untuk situasi ketika klien perlu menerima pembaruan secara real-time tanpa harus mengirim data ke server.
Apa itu API WebTransport?
- WebTransport adalah API modern yang dirancang untuk komunikasi efisien dan berlatensi rendah antara klien web dan server.
- API ini memanfaatkan protokol HTTP/3 QUIC untuk memungkinkan berbagai kemampuan transmisi data.
- WebTransport adalah alat yang kuat untuk aplikasi yang membutuhkan jaringan berperforma tinggi, seperti game real-time, live streaming, dan platform kolaborasi.
- WebTransport saat ini masih berada pada tahap working draft dan belum diadopsi secara luas.
Apa itu WebRTC?
- WebRTC (Web Real-Time Communication) adalah proyek open source dan standar API yang memungkinkan kemampuan komunikasi real-time (RTC) di dalam browser web dan aplikasi mobile tanpa infrastruktur server yang kompleks atau instalasi plugin tambahan.
- WebRTC mendukung koneksi peer-to-peer untuk pertukaran audio, video, dan data antar-browser.
- WebRTC dirancang agar dapat bekerja melalui NAT dan firewall, serta menggunakan protokol seperti ICE, STUN, dan TURN untuk membangun koneksi antar-peer.
Keterbatasan teknologi
- Hanya WebSocket dan WebTransport yang mendukung pengiriman data dua arah.
- Kegunaan semua metode messaging server-klien persisten dibatasi oleh limit 6 request per domain.
- Di aplikasi mobile, sistem operasi akan otomatis memindahkan aplikasi ke background dan menutup koneksi yang terbuka bila tidak ada aktivitas selama jangka waktu tertentu.
- Di lingkungan enterprise, banyak proxy dan firewall memblokir koneksi non-HTTP, sehingga sulit mengintegrasikan server WebSocket ke dalam infrastruktur.
Perbandingan performa
- Untuk membandingkan performa WebSocket, SSE, long polling, dan WebTransport secara langsung, perlu dievaluasi aspek-aspek utama seperti latensi, throughput, beban server, dan skalabilitas dalam berbagai kondisi.
Latensi
- WebSocket: Menawarkan latensi paling rendah berkat komunikasi full-duplex melalui satu koneksi persisten.
- Server-Sent Events: Menawarkan latensi rendah untuk komunikasi dari server ke klien, tetapi tidak dapat mengirim pesan ke server tanpa request HTTP tambahan.
- Long polling: Menyebabkan latensi yang lebih tinggi karena bergantung pada pembuatan koneksi HTTP baru untuk setiap transfer data.
- WebTransport: Diperkirakan menawarkan latensi rendah yang mirip dengan WebSocket, dengan keuntungan tambahan dari protokol HTTP/3 untuk multiplexing dan pengendalian kemacetan yang lebih efisien.
Throughput
- WebSocket: Dapat mencapai throughput tinggi berkat koneksi persisten, tetapi throughput dapat menurun ketika klien tidak mampu memproses data secepat server mengirimkannya.
- Server-Sent Events: Dapat menyiarkan pesan ke banyak klien dengan overhead lebih kecil daripada WebSocket, sehingga dapat mencapai throughput lebih tinggi untuk komunikasi satu arah dari server ke klien.
- Long polling: Umumnya menawarkan throughput lebih rendah karena overhead dari sering membuka dan menutup koneksi.
- WebTransport: Diperkirakan mendukung throughput tinggi untuk stream dua arah maupun satu arah dalam satu koneksi, dan bisa melampaui WebSocket pada skenario yang membutuhkan banyak stream.
Skalabilitas dan beban server
- WebSocket: Mempertahankan banyak koneksi WebSocket dapat meningkatkan beban server secara signifikan, sehingga dapat memengaruhi skalabilitas aplikasi dengan jumlah pengguna besar.
- Server-Sent Events: Lebih skalabel dibanding WebSocket dalam skenario yang terutama membutuhkan pembaruan dari server ke klien, karena overhead koneksinya lebih kecil.
- Long polling: Memiliki skalabilitas paling rendah karena beban server yang tinggi akibat setup koneksi yang sering.
- WebTransport: Dirancang dengan memanfaatkan efisiensi HTTP/3 dalam menangani koneksi dan stream, sehingga memiliki skalabilitas tinggi sambil mengurangi beban server dibanding WebSocket dan SSE.
Rekomendasi dan kecocokan kasus penggunaan
- Dalam lanskap teknologi komunikasi server-klien, masing-masing memiliki keunggulan unik dan kecocokan untuk kasus penggunaan tertentu.
- Server-Sent Events (SSE) adalah yang paling sederhana untuk diimplementasikan, dan dapat menghindari kendala firewall enterprise sehingga terhindar dari masalah teknis tertentu.
- WebSocket unggul dalam skenario yang membutuhkan komunikasi dua arah yang persisten.
- WebTransport menghadapi tantangan adopsi; belum didukung luas oleh framework server termasuk Node.js, dan tidak kompatibel dengan Safari.
- Long polling tidak direkomendasikan untuk sebagian besar kasus penggunaan karena tidak efisien dan memiliki overhead tinggi akibat berulang kali membuat koneksi HTTP baru.
Masalah yang diketahui
- Semua teknologi streaming real-time memiliki masalah yang sudah diketahui.
- Klien dapat melewatkan event yang terjadi di server saat sedang terhubung, menyambung ulang, atau offline.
- Firewall enterprise dapat menimbulkan masalah dalam penggunaan teknologi streaming.
Opini GN⁺
- Artikel ini membandingkan berbagai teknologi komunikasi yang dapat digunakan developer saat membangun aplikasi web real-time, sehingga memberikan informasi yang berguna untuk memilih teknologi.
- WebSocket dan SSE sudah digunakan secara luas, dan khususnya WebSocket sangat populer pada aplikasi yang membutuhkan komunikasi dua arah seperti chat real-time atau game.
- WebTransport masih berada pada tahap draft dan belum didukung luas, sehingga mungkin belum praktis untuk diterapkan pada proyek nyata. Namun, sebagai teknologi berbasis HTTP/3 di masa depan, potensinya sangat besar dan layak diperhatikan.
- Long polling adalah teknologi lama, tetapi dalam situasi tertentu masih bisa berguna, terutama ketika kompatibilitas dengan sistem legacy menjadi penting.
- Saat memilih teknologi komunikasi real-time, perlu mempertimbangkan kebutuhan aplikasi, browser dan infrastruktur server yang didukung, serta tingkat kematangan teknologinya.
1 komentar
Opini Hacker News
Mengungkapkan ketertarikan pada Server Sent Events (SSE), sambil menyinggung tidak adanya flow control (backpressure) dan multiplexing pada WebSockets, ketidakmampuan SSE mengirim data biner, serta potensi masalah dalam adopsi WebTransport.
Menunjukkan kesulitan membangun fitur real-time di lingkungan perusahaan dan keterbatasan penyelesaian masalah akibat birokrasi, lalu mengusulkan penambahan tombol refresh sebagai solusi sederhana.
Dengan asumsi HTTP/2 atau lebih tinggi, ada pendapat bahwa kombinasi EventSource dan fetch() akan cukup baik, mirip protokol lain yang menggunakan satu koneksi TCP, serta menyinggung penggunaan UDP pada HTTP/3.
Mengatakan tidak tahu mengapa WebSockets dan SSE tidak mendukung pengiriman header pada permintaan awal, dan menyoroti situasi ketika implementasi autentikasi layanan real-time diserahkan kepada pihak yang membangunnya.
Menyinggung masalah pengelolaan WebSockets dan SSE dalam skala besar, kebutuhan observabilitas khusus di backend, sulitnya debugging di perangkat mobile, biaya koneksi jaringan, dan kesulitan mempertahankan state.
Berbagi pengalaman menangani update real-time melalui server push/HTTP streaming pada sistem lelang online yang dirancang pada era 90-an.
Mengungkapkan kerinduan pada kesederhanaan long polling, sambil juga memberikan penilaian positif terhadap WebRTC.
Sebagai seseorang yang bekerja di Stream, merekomendasikan penggunaan websockets dengan keep-alive ping setiap 30 detik dalam sebagian besar kasus, serta menyinggung latensi rendah WebTransport dan pertimbangan untuk game real-time atau transmisi data suara.
Menyampaikan komentar kritis terhadap artikel yang tidak menyinggung keunggulan komunikasi berbasis UDP pada WebRTC.