WebSocket
Last updated
Last updated
Le protocole WebSocket RFC6455 est standardisé depuis décembre 2011 et implémenté par les navigateurs suivants : Chrome 16, Firefox 11, Internet Explorer 10, Opera 12.10 et Safari 6.
https://tools.ietf.org/html/rfc6455
Les WebSockets permettent d'établir une connexion bi-directionnelle entre le client et le serveur.
Il devient alors possible d'envoyer des messages en temps réel du client vers le serveur mais surtout du serveur vers le client en utilisant la même connexion.
A titre d'exemple, comparons la bande passante nécessaire pour une application web qui affiche les résultats temps réel d'un match de sport par polling puis en utilisant les WebSockets.
Polling : 1 000 000 d'utilisateurs => 1 000 000 requêtes toutes les 5 secondes => 1KB * 1 000 000 / 5 => 200 MBPS.
WebSocket : 1 000 000 d'utilisateurs => un message serveur/client à chaque évènement (en moyenne, une fois toutes les 10 secondes) => 50B * 1 000 000 / 10 => 5 MBPS.
Pour émettre des données du serveur au client, pensez à utiliser les Server-Sent Events qui s'avèrent généralement plus simple à mettre en place.
https://developer.mozilla.org/en-US/docs/Web/API/Server-sent_events/Using_server-sent_events
Une connexion WebSocket est établie suite au handshake HTTP suivant :
Socket.IO est une couche d'abstraction des WebSockets.
En l'absence de l'implémentation de WebSockets, Socket.IO peut utiliser du polling par exemple.
Socket.IO fournit également un module pour simplifier l'implémentation des WebSockets côté serveur avec Node.js.