Echtzeit-Auto-Update-Architektur (SSE)
Generated artifact. Do not edit manually.
Generated by:
scripts/build_compendia.pyRegenerate with:python3 scripts/build_compendia.py --compendium dev-handbook --web-and-texSource of truth:docs/dev/source/
Sprache / Language: Deutsch (DE) · English (EN) | PDF: Deutsches PDF · English PDF
Kompendium: §1 Dokumentationsrichtlinien · §2 Landscape-JSON-Referenz · §3 Minimales Schema & Fallback · §4 Autoreneditoren · §5 Graph-Editor · §6 Flashcard-Editor · §7 Knotensortierung · §8 Liquibase · §9 Auto-Update (SSE)
9. Echtzeit-Auto-Update-Architektur (SSE)
Sobald ein externer KI-Coach (über MCP oder REST) Mastery speichert oder das aktive Lernziel wechselt, aktualisiert sich die Cockpit-WebGUI ohne manuelles Neuladen in Echtzeit über Server-Sent Events (SSE) (Client-State-Synchronisation).
9.1. Backend-Event-Bus, SSE-Endpunkt und React-Reconnect-Hook
LearnerService-Schreibzugriff -> LearnerStateChangedEvent
-> SseService (SseEmitter-Map + ~25s-Heartbeat)
-> GET /api/ui/updates/{skillpilotId} (text/event-stream)
-> useLearnerUpdates(skillpilotId) -> refreshMastery() / State-Reload
- Spring-Events: Zustandsänderungen in
LearnerService.javafeuern einLearnerStateChangedEvent(MASTERY_UPDATE,GOAL_UPDATE/ACTIVE_GOAL_UPDATE). - SSE-Controller & Emitter-Verwaltung:
UpdateControllerstelltGET /api/ui/updates/{skillpilotId}(text/event-stream) bereit;SseServiceverwaltet dieSseEmitter-Instanzen je SkillPilot-ID, räumt geschlossene/abgelaufene Verbindungen auf und sendet alle~25seinenheartbeat-Event, damit Reverse-Proxys (Nginx/Cloudflare) ruhige Streams nicht trennen. - Frontend-Hook (
useLearnerUpdates): Öffnet eine Browser-EventSource, stößt bei eingehenden EventsrefreshMastery()sowie das Nachladen des aktiven Ziels an und verbindet sich nach Netzwerkabbrüchen mit exponentiellem Backoff neu. - Skalierungsgrenze: Die In-Memory-NIO-Verteilung über
SseEmitterbedient Einzelknoten-Instanzen ressourcenschonend; bei horizontaler Mehrknoten-Skalierung wird ein Pub/Sub-Relay (z. B. Redis Pub/Sub oder PostgreSQLLISTEN/NOTIFY) zwischen den Replikaten ergänzt.