Les websockets, à quoi ça sert ?

17 janvier 2017 Par Posté dans Expertise

Websocket est un protocole de communication faisant partie des spécifications HTML5. En cours de standardisation par le W3C, il est à présent dans tous les navigateurs récents. Il offre la possibilité d’établir un canal full duplex persistant entre le serveur et le client. Cette innovation ouvre la porte à une révolution dans la conception des sites dynamiques et temps réels.

 

Avant l’apparition des websockets

Un site hautement dynamique n’avait d’autre choix pour rafraîchir ses données que de consulter régulièrement le serveur contenant les données. La fréquence de ce rafraîchissement détermine la réactivité du site.

Requête Websocket

 

 

 

 

 

 

 

 

 

 

La page principale du site du Monde, par exemple, va consulter un de ses serveurs toutes les 15 secondes afin de pouvoir afficher des alertes éventuelles.

Websocket Request LeMonde

 

 

 

 

 

 

Cela convient à un différent type d’information, mais dans le cas d’un match de football, par exemple, il y aura en moyenne 15 secondes entre le but et l’affichage sur le site. Ce qui est suffisant pour perdre l’impression de temps réel de la part de l’utilisateur.

Si un site sportif veut pouvoir remonter l’évolution d’un score dans la seconde, chacun de ses clients doit consulter ses serveurs une fois par seconde. Le trafic généré n’est pas gênant pour un desktop. Il est plus problématique pour un téléphone portable par exemple. Quant au serveur, il doit donc faire face à l’ensemble du trafic généré par l’envoi d’une requête http par client par seconde, et ce, pour la durée du match. Il est à noter que cette requête est une requête http complète, avec l’établissement de sa connexion réseau, ses headers http.

Websocket Requêtes HTTP

 

 

 

 

 

 

 

L’utilisation des websockets change radicalement la donne. Son établissement est similaire à celle d’une connexion http/s, mais le trafic ultérieur se résume à une connexion qui est très proche d’une TCP brute.

Websocket Requete Serveur

 

 

 

 

 

 

 

 

 

 

 

On économise donc le surcoût imposé par le protocole HTTP/S, et ceci, à chaque message transmis.

Données websocket

 

 

 

La nature bidirectionnelle des websockets permet au serveur d’envoyer l’information à ses clients au moment de son choix. Non seulement l’efficacité de chaque envoi est augmentée, mais, il est maintenant inutile pour l’ensemble des clients de requêter périodiquement le serveur.

La réactivité de l’ensemble ne dépend plus d’une fréquence de rafraîchissement mais des temps réseaux et de réaction des serveurs. On passe donc de secondes à millisecondes. Tirer pleinement partie de ce gain peut impliquer un changement dans le traitement des données temps réel. Les architectures articulées autour des événements seront à privilégier (bus de données selon un modèle publish/subscribe, microservices nodejs).

Il existe d’autres bénéfices de l’utilisation des websockets. Par exemple, la connaissance à tout moment de l’état de connexion de chacun des clients, là où un serveur http classique n’a que la date de la dernière requête. Cette information peut être exploitée pour une analytique plus fine, le temps exacte de connexion passé pouvant être établi et non plus estimé. Etant une extension du standard HTML, les websockets sont compatibles avec les infrastructures existantes (firewall, proxy…). Certaines librairies JavaScript permettent de réduire les problèmes d’incompatibilité avec les navigateurs plus anciens. C’est le cas de socket.io, qui permet de se connecter à un serveur websocket en mode dégradé (HTTP/S), sans avoir à tenir compte de ce cas dans le codage du client ou du serveur.

L’API websocket permet donc une réelle exploitation des données temps réel, à condition de prévoir une partie traitement de stream dans son architecture serveur. Il ne constitue pas une solution miracle à tous les problèmes de performances, ne pouvant pas bénéficier des caches comme le reste du trafic HTTP/S.

 

Laisser un commentaire

Votre adresse email ne sera pas publié