Les événements WebSockets et les événements envoyés par le serveur sont capables de transmettre des données aux navigateurs. Il me semble que ce sont des technologies concurrentes. Quelle est la différence entre eux? Quand choisiriez-vous l'un plutôt que l'autre?
html
browser
websocket
server-sent-events
Mads Mobæk
la source
la source
curl
. Comme il ne s'agit que d'un format de texte sur HTTP, il est facile de voir ce qui se passe.Réponses:
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:
www.example1.com
et 6 autres connexions SSE verswww.example2.com
(merci Phate).HTML5Rocks a de bonnes informations sur SSE. Depuis cette page:
Résumé TLDR:
Avantages de SSE sur les Websockets:
Avantages des Websockets sur SSE:
Cas d'utilisation idéaux de l'ESS:
SST gotchas:
la source
Selon caniuse.com:
Vous pouvez utiliser un polyfill client uniquement pour étendre la prise en charge de SSE à de nombreux autres navigateurs. Cela est moins probable avec WebSockets. Quelques polyfills EventSource:
Si vous avez besoin de soutenir tous les navigateurs, pensez à utiliser une bibliothèque comme Web-socket-js , SignalR ou socket.io qui supportent plusieurs transports tels que WebSockets, ESS, toujours FRAME et AJAX longue interrogation. Celles-ci nécessitent souvent également des modifications côté serveur.
Apprenez-en plus sur SSE auprès de:
En savoir plus sur les WebSockets à partir de:
Autres différences:
la source
Opera, Chrome, Safari prend en charge SSE, Chrome, Safari prend en charge SSE à l'intérieur de SharedWorker Firefox prend en charge XMLHttpRequest readyState interactif, afin que nous puissions rendre le polyfil EventSource pour Firefox
la source
Websocket VS SSE
Web Sockets - Il s'agit d'un protocole qui fournit un canal de communication en duplex intégral sur une seule connexion TCP. Par exemple, une communication bidirectionnelle entre le serveur et le navigateur Étant donné que le protocole est plus compliqué, le serveur et le navigateur doivent s'appuyer sur la bibliothèque de websocket qui est
socket.io
SSE (Server-Sent Event) - En cas d'événement envoyé par le serveur, la communication est effectuée du serveur au navigateur uniquement et le navigateur ne peut envoyer aucune donnée au serveur. Ce type de communication est principalement utilisé lorsque le besoin consiste uniquement à afficher les données mises à jour, puis le serveur envoie le message chaque fois que les données sont mises à jour. Par exemple, une communication à sens unique entre le serveur et le navigateur. Ce protocole est moins compliqué, donc pas besoin de s'appuyer sur la bibliothèque externe JAVASCRIPT elle-même fournit l'
EventSource
interface pour recevoir les messages envoyés par le serveur.la source
Une chose à noter:
j'ai eu des problèmes avec les websockets et les pare-feu d'entreprise. (L'utilisation de HTTPS aide mais pas toujours.)
Voir https://github.com/LearnBoost/socket.io/wiki/Socket.IO-and-firewall-software https://github.com/sockjs/sockjs-client/issues/94
Je suppose qu'il n'y a pas autant de problèmes avec les événements envoyés par le serveur. Mais je ne sais pas.
Cela dit, les WebSockets sont très amusantes. J'ai un petit jeu web qui utilise des websockets (via Socket.IO) ( http://minibman.com )
la source
Voici une présentation des différences entre les sockets Web et les événements envoyés par le serveur. Depuis Java EE 7, une API WebSocket fait déjà partie de la spécification et il semble que les événements envoyés par le serveur seront publiés dans la prochaine version de l'édition entreprise.
la source
La limite de connexion maximale n'est pas un problème avec http2 + sse.
C'était un problème sur http 1
la source