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:
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user