feat(laeufe): Live-Aktualisierung per Ereignisstrom statt Polling (#53)
Die Abarbeitungsansicht fragte alle zehn Sekunden nach dem Zustand. Jetzt melden vier Datenbank-Trigger `NOTIFY lauf_geaendert, '<laufId>'`, eine LISTEN-Verbindung je Prozess hoert zu, und der Route Handler schiebt weiter. Gemessen: der Haken des Kollegen ist nach 485 ms beim Zuschauer (am Handy 487 ms), vorher bis zu zehn Sekunden. Zwanzig offene Laschen kosten nichts mehr statt zwanzig Abfragen je zehn Sekunden. Das Ereignis kommt aus der Datenbank und nicht aus dem Dienst, aus demselben Grund, aus dem auch die Regeln dort stehen: ein Trigger sieht auch den Seed, eine Migration und die Reparatur per psql. Und NOTIFY erreicht jede Instanz der Anwendung, ohne einen zweiten Dienst. Welche Tabellen melden, haengt an dem, was `laufZustand` liefert — nicht daran, was das Issue vorgeschlagen hat. Mit Triggern nur auf Schrittergebnis und Lauf waere der Strom ein **Rueckschritt** gewesen: das Polling verglich den ganzen Stand und sah deshalb auch Kommentare, ein Strom sieht nur, was gemeldet wird. Der Kommentar des Kollegen waere nie angekommen, und die Seite haette ausgesehen wie immer. Es melden jetzt vier Tabellen, und `laufZustand` traegt `anzahlAnhaenge` — ein Ereignis ohne Entsprechung im Zustand loest nichts aus. Das Polling bleibt als Rueckfall an **derselben** Adresse, unterschieden nur am Accept-Kopf: eine Rechtepruefung, ein Lesemodell, eine Nutzlast. Ein zweiter Endpunkt waere eine zweite Stelle, an der jemand rechtErforderlich vergessen kann. Bei erreichter Obergrenze antwortet der Handler gewoehnlich mit JSON; EventSource meldet darauf einen Fehler und versucht es nicht wieder, also faellt der Client von sich aus zurueck — ohne Sonderfall. Nebenbei zwei Fehler in docs/betrieb/reverse-proxy.md behoben, beide aus #52: `client_max_body_size 8m` bei `ANHANG_MAX_MB=10` haette ein 10-MB-Foto mit 413 abgewiesen, bevor die eigene Meldung zum Zuge kommt. Closes #53 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5
parent
3ccf3aa2d9
commit
1be73b266c
@@ -29,6 +29,23 @@ ANHAENGE_PFAD=./daten/anhaenge
|
||||
# Hoechstgroesse je Datei in MB und Hoechstzahl Anhaenge je Lauf.
|
||||
ANHANG_MAX_MB=10
|
||||
ANHAENGE_JE_LAUF=20
|
||||
#
|
||||
# **Wer das anhebt, hebt `client_max_body_size` im Reverse Proxy mit an.** Sonst
|
||||
# weist nginx die Datei mit 413 ab, bevor die Anwendung ihre eigene, freundliche
|
||||
# Meldung zeigen kann — siehe docs/betrieb/reverse-proxy.md.
|
||||
|
||||
# ---- Live-Aktualisierung (#033) --------------------------------------------
|
||||
# Die Abarbeitungsansicht haelt einen Ereignisstrom offen, statt alle zehn
|
||||
# Sekunden zu fragen. Beide Werte brauchen im Normalfall niemand anzufassen.
|
||||
#
|
||||
# Abstand der Herzschlaege in Millisekunden. Muss **unter** der Leerlaufzeit des
|
||||
# Reverse Proxy liegen (nginx und Caddy: 60 s), sonst schliesst der die stille
|
||||
# Verbindung.
|
||||
SSE_HERZSCHLAG_MS=25000
|
||||
# Hoechstzahl gleichzeitig offener Stroeme je Instanz. Ist sie erreicht, fallen
|
||||
# weitere Laschen von sich aus auf das Polling zurueck — die Seite bleibt
|
||||
# bedienbar, nur nicht mehr sofort aktuell.
|
||||
SSE_MAX_STROEME=200
|
||||
|
||||
# Entwicklungsdatenbank aus docker-compose.dev.yml (Port 5434, umstellbar ueber DEV_DB_PORT).
|
||||
POSTGRES_USER=laufzettel
|
||||
|
||||
Reference in New Issue
Block a user