Websockets & Événements
Nous utilisons les Websockets pour permettre une Latence Inférieure à la Seconde pour les alertes critiques.
Architecture Technique
Le serveur Websocket est construit sur Socket.io et tourne au sein du même processus Node.js que l'API HTTP.
// app/Services/Ws.ts
this.io = new Server(server.getNodeServer(), {
adapter: createAdapter(pubClient, subClient), // Redis Adapter
});
- Redis Adapter : Nous utilisons
@socket.io/redis-adapter. C'est crucial car cela permet à des instances API spécifiques de diffuser des messages aux clients connectés à d'autres instances API (Prêt pour le Scaling Horizontal). - HandShake : Se produit sur le port HTTP standard (Upgrade request).
- Routing : Défini dans
start/ws_routes.ts, séparant la logique événementielle de la gestion de connexion.
Channels & Événements
Channel cameras
Utilisé par le Dashboard pour montrer les voyants de statut en direct (Vert/Rouge).
| Événement | Payload | Déclenché Par |
|---|---|---|
status:update | { id: 1, status: 'online' } | Health check Camera Manager |
Channel alerts
Utilisé par la Cloche de Notification (Top Bar) et l'App Mobile.
| Événement | Payload | Déclenché Par |
|---|---|---|
new:alert | { type: 'STRESSED', boxId: 12, severity: 'critical' } | Analyse Redis Worker |
Channel stream
Utilisé pour la modale "Live Preview".
- Envoie des blobs MJPEG binaires directement au client.
- Note : Forte utilisation de bande passante. Actif uniquement quand un client souscrit explicitement à un ID caméra spécifique.