Bibliothèques WebSocket pour Node.js : ws, Socket.IO et uWebSockets.js

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Bibliothèques WebSocket pour Node.js : du simple chat aux systèmes temps réel à forte charge



WebSocket est un protocole assurant une connexion bidirectionnelle permanente entre le client et le serveur. Contrairement à HTTP, où la requête-réponse est initiée par le client, WebSocket permet au serveur d'envoyer des données à tout moment. Pour Node.js, réputé pour son asynchronisme et son architecture orientée événements, WebSocket est devenu un choix naturel pour créer des chats, des jeux en ligne, des terminaux de trading et la diffusion de données en continu.



Dans cet article, nous analyserons trois bibliothèques principales : ws (légère et rapide), Socket.IO (pratique avec des mécanismes de repli) et uWebSockets.js (performances record). Vous apprendrez laquelle choisir pour votre projet et comment écrire un simple chat avec chacune d'elles.



1. Bibliothèque ws — minimalisme et vitesse



ws est la bibliothèque WebSocket la plus populaire pour Node.js. Elle implémente le protocole pur RFC 6455 sans fioritures. Principaux avantages :

  • Performances maximales — jusqu'à 200 000+ messages/seconde sur un seul cœur.
  • Zéro dépendance — uniquement du JavaScript pur.
  • Contrôle total de la connexion : handshake, trames, ping/pong.
  • Prise en charge des Buffer et Streams Node.js pour les données binaires.


Inconvénients : pas de reconnexion automatique, pas de salles (rooms), pas de repli sur HTTP long-polling. Tout doit être implémenté manuellement ou via des paquets supplémentaires.



Exemple : serveur echo simple avec ws



const WebSocket = require('ws');

const server = new WebSocket.Server({ port: 8080 });

server.on('connection', (ws) => { console.log('Client connecté');

ws.on('message', (message) => { console.log('Reçu :', message.toString()); // Renvoi (echo) ws.send(`Echo : ${message}`); });

ws.on('close', () => { console.log('Client déconnecté'); });

// Envoi d'un message de bienvenue à la connexion ws.send('Bienvenue sur le serveur WebSocket !');});

console.log('Serveur démarré sur ws://localhost:8080');


Quand choisir ws ? — pour les microservices, les jeux à forte charge (où chaque image compte), pour l'intégration dans votre propre serveur HTTP (via server.on('upgrade')).



2. Socket.IO — confort et fiabilité pour la production



Socket.IO n'est pas seulement WebSocket, mais une véritable plateforme temps réel. Elle utilise WebSocket comme transport principal, mais bascule automatiquement sur HTTP long-polling si WebSocket n'est pas supporté (proxy, pare-feux, anciens navigateurs).



  • Salles (Rooms) — regroupement de clients pour les diffusions broadcast.
  • Espaces de noms (Namespaces) — séparation logique de l'application (ex : /chat et /game).
  • Reconnexion automatique avec délai exponentiel.
  • Prise en charge des événements — vous travaillez avec des événements, pas avec des messages bruts.
  • Sérialisation intégrée — transmission d'objets JSON sans analyse manuelle.


Inconvénients : surcharge du protocole (paquets supplémentaires avec métadonnées), plus de dépendances, légèrement plus lent que ws pur.



Exemple : chat avec salles sur Socket.IO (serveur)



const http = require('http');const { Server } = require('socket.io');

const server = http.createServer();const io = new Server(server, { cors: { origin: '*' } // pour le développement});

io.on('connection', (socket) => { console.log('Nouveau client :', socket.id);

// Rejoindre une salle socket.on('join_room', (roomName) => { socket.join(roomName); socket.emit('message', `Vous avez rejoint la salle ${roomName}`); socket.to(roomName).emit('message', `L'utilisateur ${socket.id} a rejoint la salle`); });

// Envoi d'un message dans la

Recommendations