docs: Recherche zur automatischen Aktualisierung — Alternativen in den Plan

Wunsch: Ansicht aktualisiert sich selbst, höchstens ~2 s Verzögerung, möglichst
über Etherpads Websockets. Recherchiert und gemessen, nicht geschätzt.

Kernbeobachtung, die alles erklärt: Der einzige Endpunkt, den wir fremdstämmig
lesen dürfen, ist genau der gedrosselte. `/export/txt` sendet
`Access-Control-Allow-Origin: *` und ist auf 10 Abrufe je 90 s und IP begrenzt
(Etherpad-Voreinstellung, in settings.json.template bestätigt); die Pad-Seite
`/p/<pad>` enthält den vollen Text in `clientVars`, sendet aber KEINEN
CORS-Header — der naheliegende Umweg ist also versperrt.

Der vorgeschlagene Websocket-Weg ebenfalls, und das ist gemessen: Ein
`wss://…/socket.io/?EIO=4&transport=websocket` scheitert mit Code 1006 ohne
`open`, während ein fremder Echo-Server aus derselben Seite sauber öffnet — die
Umgebung kann WebSockets, dieser Server nimmt uns nur nicht. Das eingebettete
Pad verbindet sich dagegen problemlos; der Unterschied ist der Origin. Damit
scheitert der Weg nicht an unserer Bereitschaft, eine Abhängigkeit aufzunehmen,
sondern an der Gegenseite — die Easysync-Frage stellt sich gar nicht mehr.

Fund der Suche: Etherpad-Plugins reden per postMessage mit der einbettenden
Seite. `ep_iframeinsert` schickt periodisch den ganzen Pad-Text ans
Elternfenster (und nimmt insert-Befehle an, könnte also sogar Schreiben
erlauben). Das ist der einzige Weg, der live ist, kein Polling braucht, das
Rate Limit nicht berührt und uns nur einen message-Zuhörer kostet — keine neue
Laufzeit-Abhängigkeit. Preis: Installation auf der Instanz.

Damit hängt alles an einer Frage: Kommt man an die Konfiguration der
Pad-Instanz? Alle wirksamen Wege sind Server-Änderungen. Ohne Zugriff bleibt
Polling im Budget — höchstens einmal je 9 s, geteilt über alle Betrachter
hinter derselben IP.

Im Plan steht das als any-of-Gruppe unter „Update by itself"; die beiden
gemessenen Sackgassen als [-] mit dem Messergebnis im Kommentar, damit niemand
sie erneut aufmacht. Der günstigste Pfad wählt dort von selbst die
Rate-Limit-Anhebung. Geprüft: 107 Knoten, keine Warnungen.
This commit is contained in:
mhoennig
2026-07-30 14:36:11 +02:00
parent c4f83a371b
commit f3d3cc3afb
2 changed files with 70 additions and 0 deletions
+10
View File
@@ -68,7 +68,17 @@
- [^] Embed the pad, keep the text mirror beside it (M)
- [^] Three views: pad and text, pad only, text only (S)
- [^] Splitter between pad and mirror (XS)
- [?] Editing in the frame stops after a while (S) %% SameSite=Lax, see D31
| [?] Ask the admin for cookie.sameSite = None (XS)
| [ ] Live with it: edit in the pad's own tab (XS)
- [^] A shared pointer: !!! focuses a node for everyone (XS)
- [?] Update by itself, within about 2 s (M)
| [?] Admin raises the export rate limit (XS) %% default is 10 per 90 s
| [?] Admin installs a plugin that pushes the text (S) %% postMessage to the page
| [?] Our own backend holds one socket and fans out (XXL)
| [ ] Poll inside the budget, at best every 9 s (S) %% legal, but not 2 s
| [-] Our own socket straight to the pad (L) %% measured: upgrade refused
| [-] Read the pad's HTML instead of the export (M) %% measured: no CORS header
- [ ] Git as the shared store (L)
| [ ] A file in a repository, changed by pull request (S) %% works today, no code
| [?] The backend commits every change (L)