[y-partyserver] Provider sends other clients' awareness back to the server
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 2/5
- Tempo stimato
- 1-3 ore
- Idoneità per principianti
- 72/100
- Tipo di issue
- Bug
- Chiarezza
- Specificata chiaramente
- Stato di attività
- Attiva
- Stack tecnologico
- typescript
- Ambito
- backend
Direzione di ricerca
Inizia da _awarenessUpdateHandler in YProvider, l'handler dei cambiamenti di awareness che trasmette a ogni modifica, e dall'handler dei messaggi di awareness che applica gli aggiornamenti del server usando il provider come origin. Aggiungi un return anticipato quando l'origin è il provider, così un client non rinvia gli aggiornamenti ricevuti dal server. È fatto quando lo spostamento del cursore in una scheda invia un frame invece di N e i cursori remoti continuano a essere mostrati nelle altre schede. Un test che verifichi che l'handler salti gli aggiornamenti con origin del server lo dimostrerebbe.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
What happens
YProvider's awareness handler sends a message on every awareness change, whatever its origin:
this._awarenessUpdateHandler = ({ added, updated, removed }, _origin) => { /* … */ broadcastMessage(/* … */) };
Awareness updates from the server are applied with the provider as origin (applyAwarenessUpdate(provider.awareness, …, provider) in the awareness message handler), so each client sends every other client's change straight back. YServer already relays every awareness message to all connections, so with N clients one cursor move costs the server N incoming frames instead of 1. On Durable Objects each of them is an invocation: a billed request, and a log event when Workers Logs is on.
Measured
y-partyserver 2.2.0 (the handler is the same on main), 3 Chromium tabs on one document, frames counted by wrapping WebSocket.prototype.send:
| Now | With the fix below | |
|---|---|---|
| Cursor move (arrow key) in one tab | 3 frames | 1 |
| Keystroke, with Tiptap's CollaborationCaret | 10 | 4 (2 with ueberdosis/y-tiptap#55 fixed too) |
Remote cursors still render in every tab with the fix.
Suggested fix
this._awarenessUpdateHandler = ({ added, updated, removed }, origin) => {
if (origin === this) return; // from the server, which has already relayed it to everyone
// …
};
Every client only needs to receive each awareness update once; re-sending is allowed but not needed (Yjs's author on the same y-websocket behaviour: https://discuss.yjs.dev/t/redundant-messages/1062). Happy to open a PR with a test.
- Lingua principale
- TypeScript
- Stelle
- 1.3k
- Fork
- 84
- Metriche di merge delle PR
- Nessuna PR unita negli ultimi 30g
Preparare l'ambiente
- Nessun Dockerfile né file Docker Compose
- Nessun modello di pull request
- Leggi la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di cloudflare/partykit
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 70/100
cloudflare/partykit#425 · 1 commento ·
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
cloudflare/partykit#423 ·
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
cloudflare/partykit#419 ·
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 65/100
cloudflare/partykit#411 ·
-
[y-partyserver] provider.destroy() leaks reconnect timer, hanging Node processes and delaying GCAperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 65/100
cloudflare/partykit#402 · 1 commento ·
Tutte le issue di cloudflare/partykit
Issue simili
-
Difficoltà 1/5 1-3 ore Idoneità per principianti 66/100
I maintainer di solito rispondono entro 1 giorno
-
area:plugins area:security area:skills bug has repro
Difficoltà 2/5 1-3 ore Idoneità per principianti 76/100
anthropics/claude-code#105911 ·
I maintainer di solito rispondono entro 1 giorno
-
documentation good first issue help wanted
Difficoltà 2/5 1-3 ore Idoneità per principianti 74/100
dev-five-git/devup-ui#879 ·
I maintainer di solito rispondono entro 11 giorni
-
openspec-apply-change skill: when blocked, may select a ready artifact unrelated to missingArtifactsAperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
Fission-AI/OpenSpec#2165 ·
I maintainer di solito rispondono entro 1 giorno
-
🐞 bug 🧐 unconfirmed
Difficoltà 2/5 1-3 ore Idoneità per principianti 66/100
Tencent/tdesign-vue-next#7032 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno