한국어English日本語简体中文繁體中文DeutschไทยTiếng ViệtРусскийPortuguês (Brasil)EspañolBahasa Indonesia

Libro blanco del lag en juegos › Diseño del netcode

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)

Abrir la ficha interactiva con gráficos y simulaciones →

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”

Síntomas
Congelamiento, Tirones, Input lag
Factores
Jitter, Pérdida de paquetes, Detención
A quién afecta
Una zona o un canal
Cuándo
De vez en cuando, al azar
Responsable
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

  1. Deterministic Lockstep Gaffer 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
  2. 1500 Archers on a 28.8: Network Programming in Age of Empires and Beyond Game Developer
    Programar los comandos para ejecutarse dos turnos después y ajustar la duración del turno a la computadora más lenta y al ping (Speed Control)
  3. A Survey and Taxonomy of Latency Compensation Techniques for Network Computer Games (ACM Computing Surveys, 2022) ACM
    Fijar el retardo de input (incoming delay) en la latencia “A→servidor + servidor→B” para que todos lo apliquen en el mismo instante

Ver también

Misma capa: Diseño del netcode

Causas de otras capas con el mismo síntoma (Congelamiento)

Ver la ficha interactiva con gráficos y simulaciones