BT

Diffuser les Connaissances et l'Innovation dans le Développement Logiciel d'Entreprise

Contribuez

Sujets

Sélectionner votre région

Accueil InfoQ Actualités La version 1.0 de Socket.IO apporte le support du binaire et un nouveau module Engine.IO

La version 1.0 de Socket.IO apporte le support du binaire et un nouveau module Engine.IO

Favoris

Guillermo Rauch a publié la version 1.0 de Socket.IO, la bibliothèque JavaScript pour créer des applications web de temps réel.

Cette nouvelle version apporte un nouveau module Engine.IO, le support pour l'envoi de données binaires et une approche simplifiée pour une croissance multinoeud.

La naissance de Socket.IO coïncide avec le démarrage de la spécification du protocole WebSocket. Rauch explique qu'à ce moment-là, avoir une communication bi-directionnelle avec le navigateur était impossible. Du coup, créer des applications temps réel était compliqué et impliquait des solutions alternatives lentes pour des développeurs habitués à des API Socket dans les autres langages de programmation.

Socket.IO permet aux clients et serveurs de communiquer via des évènements supportant n'importe quel type de structure de données. Cela a ouvert la voie aux salons de chat, aux plate-formes d'analyse en temps réel et à l'édition de documents multi-utilisateurs.

Le module Engine.IO de la dernière version de SocketIO implémente une API qui ressemble à celle de WebSocket. Cela signifie qu'elle ne gère plus les différences de compatibilité entre navigateurs et modes de transport. Selon Rauch, cette séparation permet d'innover au niveau de la couche de transport.

Dans son article "Introduction à Socket.IO 1.0", Rauch détaille les avantages d'une telle modularisation, entre autres une "simplification de la base de code et de la capacité à tester". Le serveur compte maintenant 1 234 lignes de code et le client 976.

Concernant les mises à jour sur la couche de transport, Rauch introduit un système de détection des fonctionnalités de transport qui teste les API pour s'assurer qu'elles fonctionnent comme attendu.

Valider que la variable globale JSON existe ne signifie pas pour autant que l'implémentation JSON.stringify fonctionne ou même existe. Cela peut simplement signifier que l'utilisateur l'a définit lui-même ou peut-être que l'environnement a une implémentation invalide.

Socket.IO ne considère jamais que la connexion WebSocket va simplement fonctionner, car en pratique il est probable que ça ne soit pas le cas. Au contraire, on commence par établir une connexion via XHR ou JSONP et on essaye ensuite de l'améliorer vers WebSocket.

Le support de l'échange binaire de données est une demande récurrente chez les utilisateurs, et bien que Rauch s'accorde à dire que cette fonctionnalité est "réellement utile", il considère que s'il s'était basé sur l'API WebSocket, le support serait limité. Cela est dû au fait que l'API WebSocket nécessite que la Socket soit mise en mode string ou en mode binaire. Plutôt que de devoir faire un compromis, Socket.IO supporte maintenant les Buffer (de Node.JS), Blob, ArrayBuffer, et File comme structure de données.

L'approche de Socket.IO du multinoeud est plus simple en 1.0. Dans cette nouvelle version, Socket.IO ne se préoccupe que de transmettre ses évènements plutôt que de se préoccuper de stocker et/ou répliquer les données à travers différents noeuds. Cela signifie que le développement vers plusieurs noeuds peut se faire en seulement 2 étapes :

  1. Activer le load balancing collant (par exemple, par adresse IP). Cela permet de s'assurer que les connexions qui restent ouvertes envoient toujours les requêtes vers le même noeud qui peuvent alors stocker des tampons de messages.
  2. Implémenter l'adapteur socket.io-redis.

Socket.IO 1.0 déprécie également les API Socket#set et Socket#get, avec les paquets qui sont maintenant encodés et distribués aux autres noeuds lors de la diffusion (broadcast).

Selon Rauch, les réactions à cette nouvelle version ont été excellentes, mais avec deux ans depuis la dernière version, l'attente a été longue pour certains. Liam Kaufman, fondateur de Understoodit.com, commente ainsi l'annonce sur Hacker News :

On l'attendait depuis longtemps ! Je suis vraiment content que Socket.IO 1.0 sorte enfin. La Pre-1.0 avait des problèmes techniques bloquants.

Tout le monde dans la communauté ne pensait pas que ça valait la peine d'attendre. Pour l'utilisateur Philip Wang :

J'ai changé pour SockJS pour tous mes projets (après m'être battu avec des problèmes de mémoire avec Socket.IO 0.9.*). Y a-t-il une raison valable de revenir à Socket.IO ?

Marco Aurélio, un ingénieur logiciel chez Automattic, a répondu :

Le nouveau moteur Engine.IO utilisé sous le capot est génial. Il démarre avec du long polling puis passe de façon transparente aux WebSockets (du coup, on a toujours un démarrage rapide, même sur d'anciens navigateurs ou dans des environnements avec proxy). À ma connaissance, c'est exactement le contraire de ce qui se faisait avant (d'abord WebSockets, puis passage au long polling sinon). Engine.IO est également nettement plus robuste et évolutif.

Parmi les autres fonctionnalités annoncées pour Socket.IO 1.0, on trouve les tests automatisés, une meilleure intégration, des facilités de déboggage et des API harmonisées.

Socket.IO est open source et disponible sous licence MIT. Les lecteurs InfoQ qui seraient intéressés pour contribuer au projet peuvent trouver tous les dépôts sur Github ici, et peuvent suivre @SocketIO sur Twitter.

Evaluer cet article

Pertinence
Style

Contenu Éducatif

BT