WebSocket dans Node.js : la bibliothèque ws pour le temps réel

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èque ws : WebSocket pour Node.js



La bibliothèque ws est une implémentation simple, rapide et entièrement testée du protocole WebSocket pour Node.js. Elle est le standard de facto pour créer des applications en temps réel (chats, jeux en ligne, notifications, édition collaborative) côté serveur en JavaScript. Contrairement au module http intégré, ws offre une communication bidirectionnelle complète entre le client et le serveur sans requêtes HTTP constantes.



Fonctionnalités principales

  • Support complet du protocole RFC 6455 — fonctionne avec tous les navigateurs modernes.
  • Haute performance — consommation mémoire minimale et faible latence.
  • API simple — création d'un serveur et d'un client en quelques lignes de code.
  • Support des extensions — compression des données (permessage-deflate).
  • Intégration avec le serveur HTTP — possibilité de partager le port avec Express ou un autre framework.
  • Reconnexion automatique — mécanismes intégrés pour le client.


Installation

Installation via npm :

npm install ws

Après l'installation, la bibliothèque est prête à être utilisée.



Création d'un serveur WebSocket

Créons un serveur simple qui accepte les connexions et envoie un message de bienvenue :

const WebSocket = require('ws');

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

wss.on('connection', function connection(ws) { console.log('Nouveau client connecté');

// Envoyer un message au client ws.send('Bienvenue sur le serveur WebSocket !');

// Gérer les messages entrants ws.on('message', function incoming(message) { console.log('Reçu : %s', message); // Renvoyer (écho) ws.send('Écho : ' + message); });

// Gérer la fermeture de la connexion ws.on('close', function() { console.log('Client déconnecté'); });});

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


Création d'un client WebSocket

Le client se connecte au serveur, envoie un message et reçoit une réponse :

const WebSocket = require('ws');

const ws = new WebSocket('ws://localhost:8080');

ws.on('open', function open() { console.log('Connexion établie'); ws.send('Bonjour, serveur !');});

ws.on('message', function incoming(data) { console.log('Réponse du serveur : %s', data); ws.close();});

ws.on('close', function() { console.log('Connexion fermée');});

ws.on('error', function error(err) { console.error('Erreur :', err.message);});


Travailler avec JSON et plusieurs clients

Un exemple concret — un serveur de chat qui diffuse les messages à tous les clients connectés (broadcast) :

const WebSocket = require('ws');

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

wss.on('connection', function connection(ws, req) { console.log('Client connecté. Nombre total de clients :', wss.clients.size);

ws.on('message', function incoming(message) { // Analyser le JSON let data; try { data = JSON.parse(message); } catch (e) { ws.send(JSON.stringify({ error: 'JSON invalide' })); return; }

// Diffuser à tous sauf à l'expéditeur wss.clients.forEach(function each(client) { if (client !== ws && client.readyState === WebSocket.OPEN) { client.send(JSON.stringify({ username: data.username, text: data.text, timestamp: Date.now() })); } }); });

ws.send(JSON.stringify({ system: 'Bienvenue dans le chat !' }));});

Le client peut envoyer du JSON :

ws.send(JSON.stringify({ username: 'Alice', text: 'Bonjour tout le monde !' }));


Intégration avec le serveur HTTP

Recommendations