Websockets dan SSE (Server Sent Events) keduanya mampu mendorong data ke browser, namun mereka bukan teknologi yang bersaing.
Koneksi websockets dapat mengirim data ke browser dan menerima data dari browser. Contoh yang bagus dari aplikasi yang bisa menggunakan soket web adalah aplikasi obrolan.
Koneksi SSE hanya dapat mendorong data ke browser. Kutipan saham online, atau twitter yang memperbarui timeline atau feed adalah contoh yang baik dari aplikasi yang dapat mengambil manfaat dari SSE.
Dalam praktiknya karena semua yang dapat dilakukan dengan SSE juga dapat dilakukan dengan Websockets, Websockets mendapatkan lebih banyak perhatian dan cinta, dan lebih banyak browser mendukung Websockets daripada SSE.
Namun, itu bisa berlebihan untuk beberapa jenis aplikasi, dan backend bisa lebih mudah diimplementasikan dengan protokol seperti SSE.
Selanjutnya SSE dapat di-polyfill ke browser lama yang tidak mendukungnya secara native hanya menggunakan JavaScript. Beberapa implementasi dari polyfills SSE dapat ditemukan di halaman github Modernizr .
Gotchas:
- SSE menderita pembatasan jumlah maksimum koneksi terbuka, yang bisa sangat menyakitkan ketika membuka berbagai tab karena batasnya adalah per browser dan diatur ke angka yang sangat rendah (6). Masalah telah ditandai sebagai "Tidak akan diperbaiki" di Chrome dan Firefox . Batas ini adalah per browser + domain, sehingga berarti Anda dapat membuka 6 koneksi SSE di semua tab
www.example1.com
dan 6 koneksi SSE lainnya ke www.example2.com
(terima kasih Phate).
- Hanya WS yang dapat mengirimkan data biner dan UTF-8, SSE terbatas pada UTF-8. (Terima kasih kepada Chado Nihi).
- Beberapa firewall perusahaan dengan inspeksi paket mengalami kesulitan berurusan dengan WebSockets (Sophos XG Firewall, WatchGuard, McAfee Web Gateway).
HTML5Rocks memiliki beberapa informasi bagus tentang SSE. Dari halaman itu:
Acara yang Dikirim Server vs. WebSockets
Mengapa Anda memilih Server-Sent Events daripada WebSockets? Pertanyaan bagus.
Salah satu alasan SSE tetap berada dalam bayang-bayang adalah karena API kemudian seperti WebSockets menyediakan protokol yang lebih kaya untuk melakukan komunikasi dua arah, dupleks penuh. Memiliki saluran dua arah lebih menarik untuk hal-hal seperti game, aplikasi pengiriman pesan, dan untuk kasus-kasus di mana Anda memerlukan pembaruan real-time dari kedua arah. Namun, dalam beberapa skenario, data tidak perlu dikirim dari klien. Anda hanya perlu pembaruan dari beberapa tindakan server. Beberapa contoh adalah pembaruan status teman, ticker saham, feed berita, atau mekanisme push data otomatis lainnya (misalnya memperbarui Database SQL Web sisi klien atau penyimpanan objek IndexedDB). Jika Anda perlu mengirim data ke server, XMLHttpRequest selalu menjadi teman.
SSE dikirim melalui HTTP tradisional. Itu berarti mereka tidak memerlukan protokol khusus atau implementasi server untuk dapat bekerja. WebSockets di sisi lain, memerlukan koneksi full-duplex dan server Web Socket baru untuk menangani protokol. Selain itu, Server-Sent Events memiliki beragam fitur yang tidak dimiliki WebSockets oleh desain seperti penyambungan kembali otomatis, ID peristiwa, dan kemampuan untuk mengirim acara yang sewenang-wenang.
Ringkasan TLDR:
Keuntungan SSE dari pada Websockets:
- Diangkut melalui HTTP sederhana alih-alih protokol khusus
- Dapat diisi poli dengan javascript untuk "backport" SSE ke browser yang belum mendukungnya.
- Dukungan bawaan untuk koneksi ulang dan event-id
- Protokol yang lebih sederhana
- Tidak ada masalah dengan firewall perusahaan melakukan inspeksi paket
Keuntungan dari Websockets dibandingkan SSE:
- Real time, komunikasi dua arah.
- Dukungan asli di lebih banyak browser
Kasus penggunaan SSE yang ideal:
- Streaming ticker saham
- pembaruan umpan twitter
- Pemberitahuan ke browser
Gotchas SSE:
- Tidak ada dukungan biner
- Batas koneksi terbuka maksimum