Bibliothèques WebSocket pour Node.js : ws, Socket.IO et µWebSockets
WebSocket est un protocole assurant une connexion bidirectionnelle permanente entre un client et un serveur. Dans l'écosystème Node.js, il existe plusieurs bibliothèques populaires implémentant ce protocole. Dans cet article, nous examinerons les trois principales : ws, Socket.IO et µWebSockets (uWS). Vous apprendrez comment les installer, écrire un simple serveur de chat et choisir l'outil adapté à votre tâche.
1. Bibliothèque ws — légère et haute performance
ws est la bibliothèque WebSocket la plus populaire et la plus rapide pour Node.js. Elle implémente le protocole WebSocket pur sans ajouts supplémentaires, ce qui offre une surcharge minimale et une vitesse maximale.
Installation
npm install wsExemple : serveur écho
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}`); ws.send(`Écho : ${message}`); });
ws.on('close', () => { console.log('Client déconnecté'); });});
console.log('Serveur WebSocket démarré sur ws://localhost:8080');Partie cliente (navigateur)
const socket = new WebSocket('ws://localhost:8080');
socket.onopen = () => { console.log('Connexion établie'); socket.send('Bonjour, serveur !');};
socket.onmessage = (event) => { console.log('Réponse du serveur :', event.data);};
socket.onerror = (error) => { console.error('Erreur WebSocket :', error);};Caractéristiques de ws :
- Performance : jusqu'à 2-3 fois plus rapide que Socket.IO dans les tests de débit.
- Minimalisme : pas de mécanismes intégrés de reconnexion, de salles ou de transports de repli.
- Support : compatibilité totale avec la RFC 6455.
- Utilisation : idéal pour les applications en temps réel où la vitesse est critique (données boursières, jeux, chats à forte charge).
2. Socket.IO — confort et fiabilité pour la production
Socket.IO n'est pas simplement une bibliothèque WebSocket, mais un véritable framework pour les applications en temps réel. Il ajoute au-dessus de WebSocket : reconnexion automatique, salles, espaces de noms, repli sur le long-polling (si WebSocket n'est pas pris en charge) et une API pratique.
Installation
npm install socket.ioExemple : serveur de chat simple
const http = require('http');const { Server } = require('socket.io');
const server = http.createServer();const io = new Server(server, { cors: { origin: '*' }});
io.on('connection', (socket) => { console.log(`Utilisateur connecté : ${socket.id}`);
socket.on('chat message', (msg) => { console.log(`Message : ${msg}`); io.emit('chat message', msg); // diffusion à tous });
socket.on('disconnect', () => { console.log(`Utilisateur déconnecté : ${socket.id}`); });});
server.listen(3000, () => { console.log('Serveur Socket.IO sur http://localhost:3000');});Partie cliente (navigateur)
<script src="/socket.io/socket.io.js"></script><script> const socket = io('http://localhost:3000');
socket.on('connect', () => { console.log('Connecté au serveur'); socket.emit('chat message', 'Bonjour à tous !'); });
socket.on('chat message', (msg) => { const item = document.createElement('li'); item.textContent = msg; document.getElementById('messages').appendChild(item); });</script>Caractéristiques de Socket.IO :
- Reconnexion automatique : en cas de rupture de connexion, le client tente lui-même de rétablir la liaison.
Aussi dans la bibliothèque
Client HTTP pour Go (Golang) : top bibliothèques pour travailler avec HTTP
Bibliothèque GraphQL en C++ : implémentation d'API avec graphql-cpp
Jetons JWT en C++ : bibliothèque jwt-cpp pour l'authentification