Espera al jugador más lento en lockstep Lockstep waits for the slowest peer
ID de la causa sy-lockstep · Responsable principal Desarrollo de servidor (Equipo de desarrollo) · También Desarrollo de cliente (Equipo de desarrollo)
En una arquitectura en la que todos calculan juntos el mismo turno, si el input de uno llega tarde, todos esperan.
Por qué Cada turno solo se puede calcular cuando han llegado los inputs de todos los jugadores → Efecto El input de un jugador llega tarde por jitter o pérdida de paquetes → En pantalla Todos sufren un tirón a la vez y, en casos graves, aparece la ventana “Esperando a los jugadores”
Responsable principal Desarrollo de servidor (Equipo de desarrollo) · También Desarrollo de cliente (Equipo de desarrollo)
Tareas (Equipo de desarrollo)
Servidor: ajustar el retardo de input automáticamente según el ping, dejar fuera un momento solo al que se retrasa para que los demás sigan sin esperar. Cliente: aplicar el retardo de input fijado; en un P2P sin servidor intermedio, el cliente anfitrión también se encarga de ajustar el retardo de input y de gestionar a los que se retrasan.
Cifras de referencia
Si el retardo de input se fija por debajo de “el tiempo que tarda el input en llegar al otro + jitter”, los congelamientos se vuelven frecuentes. Ese tiempo es la mitad del ping si se intercambian directamente, o aproximadamente la mitad de la suma de los pings de los dos si pasan por un servidor intermedio (relay).
En el gráfico
Picos aleatorios · Tiempo de espera por turno, latencia de llegada de los inputs por jugador
Dónde mirar
Registrar en cada turno la hora de llegada de los inputs de cada jugador y el tiempo que el turno estuvo detenido esperando, y ver en los turnos detenidos de quién se esperaba el input. Si hay servidor intermedio, también se puede ver con el intervalo de llegada de los paquetes de input de cada jugador en una captura de paquetes del servidor
Se confirma si
En cada turno detenido, el input de la misma persona llegó más tarde que el retardo de input, y en ese momento su jitter o su pérdida de paquetes se disparan
Se descarta si
Si todos los inputs llegaron a tiempo y aun así se detiene, el problema es el tiempo de cálculo de la computadora más lenta o el procesamiento del servidor. Si no hay congelamientos pero los resultados de las dos pantallas difieren, es una desincronización de los cálculos (desync): revisar “Discrepancias de pathfinding en la sincronización de comandos”
Se verifica con
Requiere logs y métricas del servidor o el cliente del juego
Fuentes
Deterministic LockstepGaffer On Games El frame n solo se puede calcular cuando han llegado todos sus inputs, así que si alguno se retrasa, se espera. Si el búfer de retardo de reproducción que absorbe el jitter es pequeño, hay tirones