déployer un service de notifications temps réel avec websocket, node.js et redis
14/11/2025
Dans un monde où les utilisateurs attendent des mises à jour instantanées (chat, alertes, monitoring), mettre en place un service de notifications temps réel est devenu un enjeu majeur. Ce tutoriel s’adresse aux développeurs Web disposant d’une expérience sur Node.js et souhaitant tirer parti de WebSocket et de Redis pour bâtir un système scalable, résilient et performant.
étapes pour déployer un service de notifications temps réel websocket avec node.js et redis
1. Préparer l’environnement
- Installer Node.js >=16 et NPM
- Installer Docker et Docker Compose (voir guide Docker)
- Prévoir un accès à un serveur Redis (local ou cloud)
2. Structurer le projet
- Créer un dossier
realtime-notifs - Initialiser NPM :
npm init -y - Installer les dépendances :
npm install ws redis dotenv
3. Écrire le serveur WebSocket
// server.js
require('dotenv').config();
const WebSocket = require('ws');
const Redis = require('redis');
// Connexion à Redis en pub/sub
const pub = Redis.createClient({ url: process.env.REDIS_URL });
const sub = pub.duplicate();
const wss = new WebSocket.Server({ port: process.env.PORT || 8080 });
const clients = new Map();
// Quand un client se connecte
wss.on('connection', (ws) => {
const id = Date.now();
clients.set(id, ws);
console.log(`Client connecté: ${id}`);
ws.on('message', (msg) => {
// Reçoit un événement à diffuser
const payload = JSON.parse(msg);
pub.publish('notifications', JSON.stringify(payload));
});
ws.on('close', () => {
clients.delete(id);
console.log(`Client déconnecté: ${id}`);
});
});
// Écoute de Redis pour diffuser aux WebSocket
sub.connect().then(() => {
sub.subscribe('notifications', (message) => {
const data = JSON.parse(message);
for (const [, client] of clients) {
if (client.readyState === WebSocket.OPEN) {
client.send(JSON.stringify(data));
}
}
});
});
4. Containeriser avec Docker Compose
# docker-compose.yml
version: '3.8'
services:
redis:
image: redis:7
command: ["redis-server", "--save", "", "--appendonly", "no"]
ports:
- "6379:6379"
realtime:
build: .
environment:
- PORT=8080
- REDIS_URL=redis://redis:6379
depends_on:
- redis
ports:
- "8080:8080"
# Dockerfile
FROM node:18-alpine
WORKDIR /app
COPY package*.json ./
RUN npm install --production
COPY . .
CMD ["node", "server.js"]
5. Tester les performances
Utilisez autocannon pour simuler 1 000 connexions :
npm install -g autocannon
autocannon -c 1000 -d 30 ws://localhost:8080
- Throughput: ≥ 10 000 msg/s
- Latency p95: < 50 ms
bonnes pratiques pour un service temps réel fiable
Sécurité et robustesse
- Valider et nettoyer tout payload JSON pour éviter l’injection.
- Limiter le nombre de connexions par IP (rate limiting).
- Utiliser WSS (TLS) en production (certificats via
nginxouCloudflare).
Scalabilité
- Exécuter plusieurs instances Docker avec un load balancer.
- Choisir un outil d’orchestration (Ansible, Kubernetes) pour déployer en cluster.
- Surveiller les files Redis et la mémoire (mettez en place des alertes).
Monitoring et logs
- Intégrer un système de logs centralisé (ELK, Datadog).
- Mesurer l’usage de CPU/RAM via
PrometheusetGrafana.
conclusion
Vous venez de découvrir comment bâtir un système de notifications temps réel, évolutif et performant en combinant Node.js, WebSocket et Redis. Ensemble, ces briques permettent de répondre aux attentes des utilisateurs en matière d’instantanéité. Prêt à déployer cette solution dans votre projet application web ? N’hésitez pas à nous contacter pour un accompagnement sur-mesure.

