Hacktoberfest 2026: los issues que los mantenedores marcaron para octubre, abiertos y aptos para principiantes. Explorar issues de Hacktoberfest

[y-partyserver] Provider sends other clients' awareness back to the server

Abierto Apto para principiantes
#424 1 comentario 0 reacciones 0 asignados Ver en GitHub

Nadie ha tomado este issue todavía.

Evaluación

Dificultad
2/5
Tiempo estimado
1-3 horas
Aptitud para principiantes
72/100
Tipo de issue
Error
Claridad
Bien especificado
Estado de actividad
Activo
Stack tecnológico
typescript
Área
backend

Línea de trabajo

Empieza por _awarenessUpdateHandler en YProvider, el manejador de cambios de awareness que envía un mensaje en cada cambio, y por el manejador de mensajes de awareness que aplica las actualizaciones del servidor usando el provider como origin. Añade un retorno anticipado cuando el origin sea el provider, para que un cliente no vuelva a enviar actualizaciones que recibió del servidor. Está terminado cuando un movimiento del cursor en una pestaña envía un frame en lugar de N, y los cursores remotos siguen mostrándose en las demás pestañas. Una prueba que compruebe que el manejador omite las actualizaciones con origin del servidor lo demostraría.

Escrito por el modelo de indexación a partir del texto del issue.

Descripción

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.

Lenguaje dominante
TypeScript
Estrellas
1.3k
Forks
83
Métricas de merge de PR
Sin PR fusionados en 30 d

Preparar el entorno

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Más de cloudflare/partykit

Todos los issues de cloudflare/partykit

Issues similares

Más issues de TypeScript

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.