Que sont les websockets et à quoi ca sert ?

Que sont les websockets et à quoi ca sert ?

Cet article est une reprise de l’ancien contenu du site, les anciens propriétaires en sont donc les propriétaires, nous l’avons mis ici en tant qu’hommage.

Le protocole WebSocket vise à créer un canal de communication entièrement duplex, basé sur le socket TCP.

Le Web a évolué. Nous sommes passés de Gopher à HTTP 1, puis 1.1. Nous avons également utilisé AJAX pour rafraîchir la page, sans avoir à tout recharger.

Aujourd’hui, nous avons des applications qui peuvent faire des centaines de requêtes aux serveurs, même si l’utilisateur ne modifie pas la page. De plus, je parie que beaucoup de gens ne savent plus ce qu’est une page web…

Le problème est qu’AJAX est HTTP comme HTTP est sans état. Il ne stocke aucune information en mémoire pendant la durée d’une requête. Cela a ses avantages, mais cela signifie également que pour chaque requête, vous devez vous connecter puis vous refermer. Cela prend quelques millisecondes à chaque fois, et cela peut être encore plus si vous utilisez SSL.

Un autre problème est que le serveur ne peut pas transmettre d’informations à l’utilisateur (ici le navigateur) lorsque le client n’a pas fait la demande en premier. Par conséquent, pour déterminer s’il y a quelque chose de nouveau, le navigateur doit envoyer fréquemment des requêtes au serveur ou utiliser des astuces importantes telles que le polling long.

Les Websockets (c’est un abus de langage, nous devons parler du protocole Websocket) ont été développées pour répondre à ces besoins. Elles permettent une connexion indéfinie entre le client et le serveur. Cela signifie que chaque requête est plus efficace et plus légère. De plus, le serveur est capable de mettre des requêtes à la disposition des navigateurs pour les avertir qu’il y a quelque chose de nouveau.

Cela permet d’effectuer toutes les choses qu’AJAX faisait auparavant mais de manière beaucoup plus rapide et moins lourde. De plus, il peut transmettre des notifications (cette information a changé ; le message a été délivré ; ce joueur est celui qui a effectué cette action) …) au navigateur lorsqu’un événement se produit.

En substance, il s’agit de créer des applications web qui sont presque en temps réel.

Il existe de nombreuses autres technologies qui peuvent accomplir cela. Applets Java, flash comet, événements envoyés par le serveur…

Mais aucune d’entre elles n’a réussi. Websocket est aujourd’hui la solution la plus populaire.

Caractéristiques des websocket

Le protocole Websocket utilise l’abréviation ws et wss si SSL, de sorte que les URL vers les points d’extrémité websocket ressemblent à : ws ://domain.tld/path/to/truc/.

Il utilise astucieusement la même poignée de main que HTTP, ce qui permet aux serveurs de traiter les deux ports. Ainsi, vous pouvez exécuter Websocket sur les ports 80 et 443. Cependant, certains serveurs mandataires s’embrouillent lorsqu’ils voient un websocket non crypté et tentent d’ignorer votre connexion en l’interprétant comme du HTTP. Si vous voulez avoir une application fiable, pensez à investir dans un certificat SSL.

Tout ceci est compatible avec IE10 et plus. Notez que IE est maintenant la norme pour les pires navigateurs, à tel point que je n’ai pas besoin de parler des autres navigateurs, vous avez déjà tout. Des plugins Flash sont également disponibles pour émuler les websockets sur les anciens navigateurs, c’est-à-dire le plus daté IE.

Les websockets sont par défaut capables de gérer les requêtes crossdomain, ce qui n’est pas le cas d’AJAX. Avec les nouvelles applications qui exécutent NodeJS localement (comme popcorntime), nous pouvons envisager un nouveau type d’attaque, à savoir un site web qui se connecte à un serveur websocket local sur votre ordinateur. Comme les websockets sont fréquemment employés pour les RPC, il y a une possibilité.

Ce qui prend le plus de temps dans cet exemple est la connexion qui n’est effectuée qu’une seule fois. L’échange de données se fait ensuite extrêmement rapidement.

C’est un exemple de Javascript, mais le client websocket n’est pas toujours un navigateur. En fait, c’est la situation avec le WAMP ses clients, qui peuvent inclure des programmes Python, Objective C, Java, C++, etc. L’avantage de WAMP est qu’il automatise toutes les machines pour décomposer la logique de programmation en différentes fonctions et services, au lieu de devoir tout effectuer manuellement en utilisant sending() et onmessage().

Dans tous les cas, vous aurez besoin d’un serveur qui supporte les Websockets pour l’utiliser. En Python, il s’agit de Tornado ou Twisted (sur lequel le serveur crossbar WAMP est construit). En Javascript, c’est NodeJS. Cependant, vous aurez besoin d’un logiciel capable de gérer les entrées-sorties de manière à ne pas bloquer les nombreuses connexions ouvertes en même temps, afin que le système fonctionne efficacement.

sam artois

A propos de l'auteur

Samuel Artois est un développeur Python passionné d'automatisation et de marketing. Depuis plusieurs années, il a développé une expertise solide dans ces domaines et a su mettre ses compétences en pratique sur de nombreux projets.

Laisser un commentaire