mise en place de WebSockets en temps réel dans un SaaS Node.js avec Socket.IO et Docker
20/08/2025
Dans un SaaS, offrir des fonctionnalités en temps réel (notifications, chat, suivi live) améliore l’expérience utilisateur et la rétention. Cet article détaille comment intégrer WebSockets via Socket.IO dans une application Node.js conteneurisée avec Docker. Vous verrez les configurations, les commandes, les pièges à éviter et quelques mesures de performance clés.
étapes pour implémenter WebSockets en temps réel dans un SaaS Node.js avec Socket.IO et Docker
1. Initialiser le projet et installer les dépendances
mkdir realtime-saas && cd realtime-saas
npm init -y
npm install express socket.io
On crée un petit serveur Express pour accueillir Socket.IO.
2. Créer le serveur WebSocket (fichier server.js)
const express = require('express');
const http = require('http');
const { Server } = require('socket.io');
const app = express();
const server = http.createServer(app);
const io = new Server(server, {
cors: { origin: '*' },
pingInterval: 10000,
pingTimeout: 5000
});
// gestion des connexions
io.on('connection', socket => {
console.log(`Client connecté : ${socket.id}`);
socket.on('message', data => {
// renvoie à tous les clients
io.emit('message', data);
});
socket.on('disconnect', () => {
console.log(`Client déconnecté : ${socket.id}`);
});
});
const PORT = process.env.PORT || 3000;
server.listen(PORT, () => console.log(`⚡ Serveur à l'écoute sur :${PORT}`));
3. Dockeriser l’application
# Dockerfile
FROM node:18-alpine
WORKDIR /app
COPY package*.json ./
RUN npm ci --only=production
COPY . .
EXPOSE 3000
CMD ["node", "server.js"]
# docker-compose.yml
version: '3.8'
services:
realtime-saas:
build: .
ports:
- "3000:3000"
environment:
- NODE_ENV=production
Commandes :
docker-compose build
docker-compose up -d
4. Tester la latence et la montée en charge
Utilisez autocannon
pour mesurer les performances sous 100 connexions concurrentes :
npm install -g autocannon
autocannon -c 100 -d 30 http://localhost:3000/socket.io/
Exemple de résultat :
Metric | Valeur |
---|---|
Req/sec | 1 200 |
P95 Latency | 45 ms |
bonnes pratiques et astuces
- Adapter Redis pour scaler sur plusieurs instances : utilisez
socket.io-redis
afin de partager les messages. - CORS strict : en production, limitez l’origine aux domaines de votre SaaS.
- SSL/TLS : dockerisez un reverse proxy Nginx ou Apache pour sécuriser les échanges.
- Limites de mémoire : Node.js détient par défaut 512 Mo de heap. Pour monter plus haut, passez le flag
--max-old-space-size=1024
. - Keep-alive et ping/pong : ajustez les intervalles pour détecter rapidement les connexions mortes.
conclusion
Vous disposez maintenant d’une base technique pour proposer du temps réel fiable dans votre SaaS Node.js conteneurisé. L’étape suivante : déployer en production avec une CI/CD robuste et un cluster Kubernetes pour la haute disponibilité. Pour un accompagnement personnalisé, contactez nos experts.
Call to action : Demandez un audit gratuit de votre architecture WebSockets sur Novane.