Echtzeit-Server (SSE)
Node.js SSE-Server für Live-Updates in allen Modulen
Prinzip
Der Echtzeit-Server ist ein eigenständiger Node.js-Dienst, der zwischen PostgreSQL und dem Browser vermittelt. Wenn sich in der Datenbank etwas ändert, sendet PostgreSQL über NOTIFY ein Ereignis. Der SSE-Server empfängt es per LISTEN und leitet es über eine offene HTTP-Verbindung an den Browser weiter.
pg_notify() bei relevanten Änderungen ausLISTEN und schreibt sie in den HTTP-StreamEventSource-API empfängt das Ereignis und aktualisiert die OberflächeKein Polling, keine Verzögerung. Änderungen erscheinen innerhalb von Millisekunden.
Kanäle
Der Server lauscht auf sechs PostgreSQL-Kanäle pro Mandant:
crmti_changewhatsapp_messagecalendar_changefaktura_changeweroni_questioncamera_eventModule mit Echtzeit-Updates
Die folgenden Bereiche reagieren auf SSE-Ereignisse und aktualisieren sich ohne Seitenreload:
- InfoBar — Zähler für ungelesene Anrufe, E-Mails, WhatsApp-Nachrichten und Weroni-Rückfragen
- Kalender — Neue oder verschobene Termine erscheinen sofort
- Faktura — Belegstatus-Änderungen werden live synchronisiert
- WhatsApp — Eingehende Nachrichten erscheinen direkt im Chat
- Kamera — Neue Erkennungen und Alarme in der Live-Ansicht
- Wall-Display — Großbildschirm-Modus mit Echtzeit-Aktualisierung
- Mechaniker-Modus — Auftragszuweisungen und Statuswechsel in Echtzeit
Mandantentrennung
Jeder Mandant erhält eine eigene PostgreSQL-LISTEN-Verbindung. Die Zuordnung erfolgt über die Session:
- Der Browser sendet den Session-Cookie mit der SSE-Anfrage.
- Der SSE-Server ermittelt über die Auth-Datenbank den zugehörigen Mandanten.
- Eine dedizierte LISTEN-Verbindung zur Mandanten-Datenbank wird hergestellt (oder wiederverwendet).
- Ereignisse erreichen ausschließlich die Benutzer des jeweiligen Mandanten.
LISTEN-Verbindungen werden automatisch aufgebaut, wenn sich der erste Benutzer eines Mandanten verbindet, und geschlossen, wenn der letzte Benutzer die Verbindung trennt.
Stabilität
EventSource-Standard)Auto-Reload bei Deployment
Der SSE-Server überwacht die Datei build-id.txt im Build-Verzeichnis. Ändert sich die Build-ID nach einem Deployment, erhalten alle verbundenen Browser ein build_changed-Ereignis und laden die Anwendung automatisch neu.
Deployment
Der SSE-Server läuft als Hintergrundprozess im Docker-Container neben Apache und PHP-FPM. Apache leitet /sse/-Anfragen per Reverse-Proxy an Port 3001 weiter.
http-Modul, keine Frameworks)pg (PostgreSQL-Client) — einzige externe AbhängigkeitSSE_PORT)GET /health — gibt ok zurückProxyPass /sse/ http://127.0.0.1:3001/