Baik WebSockets dan Server-Sent Events mampu mendorong data ke browser. Bagi saya mereka tampaknya merupakan teknologi yang bersaing. Apa perbedaan di antara mereka? Kapan Anda memilih satu dari yang lain?
html
browser
websocket
server-sent-events
Mads Mobæk
sumber
sumber
curl
. Karena ini hanya format teks melalui HTTP, mudah untuk melihat apa yang terjadi.Jawaban:
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:
www.example1.com
dan 6 koneksi SSE lainnya kewww.example2.com
(terima kasih Phate).HTML5Rocks memiliki beberapa informasi bagus tentang SSE. Dari halaman itu:
Ringkasan TLDR:
Keuntungan SSE dari pada Websockets:
Keuntungan dari Websockets dibandingkan SSE:
Kasus penggunaan SSE yang ideal:
Gotchas SSE:
sumber
Menurut caniuse.com:
Anda dapat menggunakan polyfill khusus klien untuk memperluas dukungan SSE ke banyak browser lain. Ini lebih kecil kemungkinannya dengan WebSockets. Beberapa polyfills EventSource:
Jika Anda perlu mendukung semua browser, pertimbangkan untuk menggunakan perpustakaan seperti web-socket-js , SignalR atau socket.io yang mendukung banyak transport seperti WebSockets, SSE, Forever Frame dan AJAX polling panjang. Ini sering memerlukan modifikasi ke sisi server juga.
Pelajari lebih lanjut tentang SSE dari:
Pelajari lebih lanjut tentang WebSockets dari:
Perbedaan lainnya:
sumber
Opera, Chrome, Safari mendukung SSE, Chrome, Safari mendukung SSE di dalam SharedWorker Firefox mendukung XMLHttpRequest readyState interaktif, sehingga kami dapat membuat EventSource polyfil untuk Firefox
sumber
Websocket VS SSE
Soket Web - Ini adalah protokol yang menyediakan saluran komunikasi dupleks penuh melalui koneksi TCP tunggal. Misalnya komunikasi dua arah antara Server dan Browser Karena protokol lebih rumit, server dan browser harus bergantung pada perpustakaan websocket yang
socket.io
SSE (Server-Sent Event) - Dalam hal server mengirim acara, komunikasi dilakukan dari server ke browser saja dan browser tidak dapat mengirim data apa pun ke server. Jenis komunikasi ini terutama digunakan ketika kebutuhan hanya untuk menampilkan data yang diperbarui, kemudian server mengirim pesan setiap kali data diperbarui. Misalnya komunikasi satu arah antara Server ke Browser. Protokol ini tidak terlalu rumit, jadi tidak perlu mengandalkan perpustakaan eksternal JAVASCRIPT sendiri menyediakan
EventSource
antarmuka untuk menerima pesan yang dikirim server.sumber
Satu hal yang perlu diperhatikan:
Saya memiliki masalah dengan soket web dan firewall perusahaan. (Menggunakan HTTPS membantu tetapi tidak selalu.)
Lihat https://github.com/LearnBoost/socket.io/wiki/Socket.IO-and-firewall-software https://github.com/sockjs/sockjs-client/issues/94
Saya berasumsi tidak ada banyak masalah dengan Server-Sent Events. Tapi saya tidak tahu.
Yang mengatakan, WebSockets sangat menyenangkan. Saya memiliki permainan web kecil yang menggunakan soket web (melalui Socket.IO) ( http://minibman.com )
sumber
Berikut ini adalah pembicaraan tentang perbedaan antara soket web dan acara yang dikirim server. Sejak Java EE 7 WebSocket API sudah menjadi bagian dari spesifikasi dan tampaknya server yang mengirim acara akan dirilis dalam versi berikutnya dari edisi perusahaan.
sumber
Batas koneksi maks tidak menjadi masalah dengan http2 + sse.
Itu masalah di http 1
sumber