Skip to content

Bloquear la pantalla del celular expulsa al jugador: los pings no cuentan como actividad #17

Description

@leocagli

Síntoma

Un jugador bloquea la pantalla del celular o cambia de aplicación, vuelve a los 15 minutos y está desconectado, aunque el cliente nunca cerró el WebSocket.

Causa

Son dos cosas que se combinan.

1. Los pings no cuentan como actividad. En server/src/server.ts, la función que registra actividad del cliente retorna antes de tocar lastActivityAt cuando el paquete es un ping:

// trackClientActivity, alrededor de la linea 365
// si el paquete es ping, retorna sin actualizar lastActivityAt

2. El timeout de inactividad es de 15 minutos (idleCharacterTimeoutMs en server/src/vars.ts).

El cliente manda ping cada 10 segundos, así que la conexión está viva. Pero para el servidor el jugador lleva 15 minutos sin hacer nada y lo expulsa.

En desktop esto se nota poco porque la pestaña suele quedar activa. En mobile es constante: basta con atender una llamada.

Por qué no alcanza con subir el timeout

Subirlo sólo corre el problema más lejos. El punto es que el ping es evidencia de que el cliente sigue ahí; lo que el timeout quiere detectar es un cliente colgado, y para eso el ping es justamente la señal de que no lo está.

Propuesta

  1. Que el ping actualice lastActivityAt, o llevar dos relojes separados: uno de "conexión viva" (ping) y otro de "jugador activo" (acciones de juego).
  2. Si se quiere seguir expulsando jugadores inactivos por razones de juego (liberar lugar, evitar AFK farming), que sea una regla explícita y comunicada, no un efecto secundario del keepalive.

Criterios de aceptación

  • Un cliente que sólo manda pings no es expulsado por inactividad
  • Un cliente que dejó de responder sí se limpia
  • Volver del segundo plano tras 15 minutos mantiene la sesión

Relacionado

Sin esto, el trabajo de soporte mobile no sirve de mucho: el jugador se desconecta cada vez que bloquea el teléfono.

Archivos relevantes

  • server/src/server.ts (trackClientActivity, alrededor de la línea 365; barrido de inactividad alrededor de la 697)
  • server/src/vars.ts (idleCharacterTimeoutMs)

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

GrantFox OSSIssue tracked in GrantFox OSSMaybe RewardedIssue may be eligible for a GrantFox rewardThird CampaignCampaign: Third CampaignbountyIssue con recompensa asignadabugSomething isn't workinggrantfoxPublicada en la campana de GrantFoxmobileSoporte para jugar desde celularreward-20-usdRecompensa 20 USD - alcance chico y bien definido

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions