Aller au contenu principal

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énementPayloadDé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énementPayloadDé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.