Web soketleri ve SSE (Sunucu Gönderilen Olaylar) tarayıcılara veri gönderebilir, ancak rakip teknolojiler değildir.
Web soketleri bağlantıları hem tarayıcıya veri gönderebilir hem de tarayıcıdan veri alabilir. Websockets kullanabilen bir uygulamaya iyi bir örnek bir sohbet uygulamasıdır.
SSE bağlantıları yalnızca tarayıcıya veri gönderebilir. Çevrimiçi hisse senedi fiyatları veya zaman çizelgesini veya feed'i güncelleyen twitter'lar, SSE'den yararlanabilecek bir uygulama için iyi örneklerdir.
Uygulamada, SSE ile yapılabilecek her şey Websockets ile de yapılabileceğinden, Websockets çok daha fazla ilgi ve sevgi kazanıyor ve daha birçok tarayıcı WebEckets'i SSE'den daha fazla destekliyor.
Ancak, bazı uygulama türleri için aşırıya kaçabilir ve arka ucun SSE gibi bir protokolle uygulanması daha kolay olabilir.
Ayrıca SSE, yalnızca JavaScript kullanarak yerel olarak desteklemeyen eski tarayıcılara çoklu doldurulabilir. SSE çoklu dolgularının bazı uygulamaları Modernizr github sayfasında bulunabilir .
Sorunlar:
- SSE, maksimum sekme açık bağlantı sayısında bir sınırlama yaşar; bu, sınır tarayıcı başına ve çok düşük bir sayıya ayarlandığından çeşitli sekmeleri açarken özellikle acı verici olabilir (6). Sorun, Chrome ve Firefox'ta "Düzeltilmeyecek" olarak işaretlendi . Bu sınır tarayıcı + etki alanı başınadır, yani tüm sekmelerde
www.example1.com
6 SSE bağlantısı ve başka bir 6 SSE bağlantısı açabilirsiniz www.example2.com
(teşekkürler Phate).
- Sadece WS hem ikili verileri hem de UTF-8 iletebilir, SSE UTF-8 ile sınırlıdır. (Chado Nihi'ye teşekkürler).
- Paket denetimine sahip bazı kurumsal güvenlik duvarları WebSockets (Sophos XG Firewall, WatchGuard, McAfee Web Gateway) ile ilgili sorun yaşıyor.
HTML5Rocks , SSE hakkında bazı iyi bilgilere sahiptir. Bu sayfadan:
Sunucu Tarafından Gönderilen Etkinlikler ve WebSockets
Neden WebSockets üzerinden Sunucudan Gönderilen Olaylar'ı seçtiniz? İyi soru.
SSE'lerin gölgede kalmasının bir nedeni, WebSockets gibi daha sonraki API'lerin çift yönlü, tam çift yönlü iletişim gerçekleştirmek için daha zengin bir protokol sağlamasıdır. İki yönlü bir kanala sahip olmak oyunlar, mesajlaşma uygulamaları ve her iki yönde gerçek zamanlıya yakın güncellemelere ihtiyaç duyduğunuz durumlar için daha caziptir. Ancak, bazı senaryolarda verilerin istemciden gönderilmesine gerek yoktur. Bazı sunucu işlemlerinden güncellemelere ihtiyacınız vardır. Birkaç örnek, arkadaşlarınızın durum güncellemeleri, hisse senedi işaretçileri, haber beslemeleri veya diğer otomatik veri gönderme mekanizmalarıdır (örneğin, istemci tarafı Web SQL Veritabanını veya IndexedDB nesne deposunu güncelleme). Bir sunucuya veri göndermeniz gerekirse, XMLHttpRequest her zaman bir dosttur.
SSE'ler geleneksel HTTP üzerinden gönderilir. Bu, çalışmak için özel bir protokol veya sunucu uygulaması gerektirmedikleri anlamına gelir. Diğer yandan WebSockets, protokolü işlemek için tam çift yönlü bağlantılar ve yeni Web Socket sunucuları gerektirir. Buna ek olarak, Sunucudan Gönderilen Olaylar, WebSockets'in otomatik yeniden bağlanma, olay kimlikleri ve rasgele olaylar gönderme yeteneği gibi tasarım gereği eksik olduğu çeşitli özelliklere sahiptir.
TLDR özeti:
SSE'nin Web Soketlerine Göre Avantajları:
- Özel bir protokol yerine basit HTTP üzerinden aktarılır
- Henüz desteklemeyen tarayıcılara SSE'yi "backport" yapmak için javascript ile poli doldurulabilir.
- Yeniden bağlantı ve olay kimliği için yerleşik destek
- Daha basit protokol
- Paket denetimi yapan şirket güvenlik duvarlarında sorun yok
Web Soketlerinin SSE'ye Göre Avantajları:
- Gerçek zamanlı, iki yönlü iletişim.
- Daha fazla tarayıcıda yerel destek
SSE'nin ideal kullanım durumları:
- Stok senedi akışı
- twitter feed güncelleme
- Tarayıcıya bildirimler
SSE gotchas:
- İkili destek yok
- Maksimum açık bağlantı limiti