Websockets et SSE (Server Sent Events) sont tous deux capables de transmettre des données aux navigateurs, mais ce ne sont pas des technologies concurrentes.
Les connexions Websockets peuvent à la fois envoyer des données au navigateur et recevoir des données du navigateur. Un bon exemple d'une application qui pourrait utiliser des websockets est une application de chat.
Les connexions SSE peuvent uniquement envoyer des données au navigateur. Les cotations boursières en ligne ou les twitters mettant à jour la chronologie ou le flux sont de bons exemples d'une application qui pourrait bénéficier de l'ESS.
Dans la pratique, car tout ce qui peut être fait avec SSE peut également être fait avec Websockets, Websockets reçoit beaucoup plus d'attention et d'amour, et beaucoup plus de navigateurs prennent en charge les Websockets que SSE.
Cependant, il peut être exagéré pour certains types d'applications et le backend pourrait être plus facile à implémenter avec un protocole tel que SSE.
De plus, SSE peut être polyfilled dans les navigateurs plus anciens qui ne le prennent pas en charge nativement en utilisant uniquement JavaScript. Certaines implémentations de polyfills SSE peuvent être trouvées sur la page github de Modernizr .
Gotchas:
- SSE souffre d'une limitation du nombre maximal de connexions ouvertes, ce qui peut être particulièrement pénible lors de l'ouverture de divers onglets car la limite est par navigateur et définie sur un nombre très faible (6). Le problème a été marqué comme "ne sera pas résolu" dans Chrome et Firefox . Cette limite est par navigateur + domaine, ce qui signifie que vous pouvez ouvrir 6 connexions SSE dans tous les onglets vers
www.example1.com
et 6 autres connexions SSE vers www.example2.com
(merci Phate).
- Seul WS peut transmettre à la fois des données binaires et UTF-8, SSE est limité à UTF-8. (Merci à Chado Nihi).
- Certains pare-feu d'entreprise avec inspection des paquets ont du mal à gérer les WebSockets (Sophos XG Firewall, WatchGuard, McAfee Web Gateway).
HTML5Rocks a de bonnes informations sur SSE. Depuis cette page:
Événements envoyés par le serveur et WebSockets
Pourquoi choisiriez-vous des événements envoyés par le serveur plutôt que des WebSockets? Bonne question.
L'une des raisons pour lesquelles les SSE ont été gardées dans l'ombre est que les API ultérieures comme WebSockets fournissent un protocole plus riche pour effectuer des communications bidirectionnelles en duplex intégral. Avoir un canal bidirectionnel est plus attrayant pour des choses comme les jeux, les applications de messagerie et pour les cas où vous avez besoin de mises à jour presque en temps réel dans les deux sens. Cependant, dans certains scénarios, les données n'ont pas besoin d'être envoyées par le client. Vous avez simplement besoin des mises à jour d'une action du serveur. Quelques exemples seraient les mises à jour de statut d'amis, les tickers de stock, les flux d'actualités ou d'autres mécanismes automatisés de transmission de données (par exemple, la mise à jour d'une base de données Web SQL côté client ou d'un magasin d'objets IndexedDB). Si vous devez envoyer des données à un serveur, XMLHttpRequest est toujours un ami.
Les SSE sont envoyées via HTTP traditionnel. Cela signifie qu'ils n'ont pas besoin d'un protocole spécial ou d'une implémentation de serveur pour fonctionner. Les WebSockets, d'autre part, nécessitent des connexions full-duplex et de nouveaux serveurs Web Socket pour gérer le protocole. En outre, les événements envoyés par le serveur ont une variété de fonctionnalités qui manquent par conception aux WebSockets, telles que la reconnexion automatique, les ID d'événement et la possibilité d'envoyer des événements arbitraires.
Résumé TLDR:
Avantages de SSE sur les Websockets:
- Transporté via HTTP simple au lieu d'un protocole personnalisé
- Peut être poly-rempli de javascript pour "backporter" SSE vers les navigateurs qui ne le prennent pas encore en charge.
- Prise en charge intégrée de la reconnexion et de l'ID d'événement
- Protocole plus simple
- Aucun problème avec les pare-feu d'entreprise faisant l'inspection des paquets
Avantages des Websockets sur SSE:
- Communication bidirectionnelle en temps réel.
- Prise en charge native dans plus de navigateurs
Cas d'utilisation idéaux de l'ESS:
- Streaming boursier boursier
- mise à jour du fil twitter
- Notifications au navigateur
SST gotchas:
- Pas de support binaire
- Limite maximale de connexions ouvertes