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

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

Feedback solo tras la respuesta del servidor (solicitud-respuesta) Request-response (no client-side feedback)

ID de la causa sy-request-response · Responsable principal Desarrollo de cliente (Equipo de desarrollo) · También Desarrollo de servidor (Equipo de desarrollo)

Abrir la ficha interactiva con gráficos y simulaciones →

Al presionar un botón no hay animación ni sonido hasta que llega la respuesta del servidor. El ping se convierte directamente en el tiempo de respuesta.

Por qué Las habilidades, el movimiento y la recogida de objetos se reproducen solo cuando llega la confirmación del servidor → Efecto Desde que se presiona, no hay ninguna respuesta durante el tiempo de ida y vuelta + la espera del tick → En pantalla Con 150 ms de ping, todas las acciones responden 0.2 s tarde

Síntomas
Input lag
Factores
Latencia
A quién afecta
Solo yo
Cuándo
Siempre, Al hacer ciertas acciones
Responsable
Responsable principal Desarrollo de cliente (Equipo de desarrollo) · También Desarrollo de servidor (Equipo de desarrollo)
Tareas (Equipo de desarrollo)
Cliente: empezar las animaciones, los sonidos y los efectos en cuanto se presiona (feedback anticipado) y mostrar solo los resultados (daño, recompensas) tras la confirmación del servidor, aplicar al instante el movimiento y el ataque básico con predicción, y al recibir una corrección de posición del servidor, volver a aplicar desde esa posición los inputs que aún no se han confirmado. Servidor: calcular el movimiento a partir de los inputs recibidos y enviar una corrección solo cuando la diferencia con la posición que predijo el cliente supere un umbral.
Cifras de referencia
Tiempo de respuesta ≈ ping + la mitad del intervalo de tick + un frame. Con 20 ticks y 150 ms de ping, unos 190 ms.
En el gráfico
Siempre alto · Tiempo desde el input hasta el inicio del feedback, RTT (ping)
Dónde mirar
Registrar en el log del cliente de una build de desarrollo la hora del input, la hora de inicio de la primera animación o sonido y la hora de llegada de la respuesta del servidor, y verlas junto al RTT del juego. Medir variando el ping con la emulación de red del motor (Unreal NetEmulation.PktLag) o añadiendo latencia con tc netem de Linux en un servidor de pruebas
Se confirma si
El feedback empieza siempre en el mismo instante en que llega la respuesta del servidor, el tiempo del input al feedback equivale al RTT + la espera del tick, y crece exactamente lo que se añade de latencia
Se descarta si
Si el feedback empieza en cuanto se presiona y solo llegan tarde resultados como los números de daño, es el diseño normal. Si incluso con ping bajo el retraso supera el intervalo de tick, apunta a “Doble espera de tick” o a un problema de frames en el cliente
Se verifica con
Requiere logs y métricas del servidor o el cliente del juego
Para saber más
En juegos que no necesitan respuestas rápidas, como los de turnos, los de cartas o los idle, este modelo es el más simple y seguro. El problema aparece cuando en un juego con control en tiempo real también se hacen así el movimiento o el ataque básico.

Fuentes

  1. Latency Compensating Methods in Client/Server In-game Protocol Design and Optimization (Yahn W. Bernier, GDC 2001) Valve
    Un cliente que solo espera el resultado del servidor muestra cada acción 500 ms tarde si la latencia es de 500 ms. Se resuelve con predicción en el cliente y reconciliación con el servidor
  2. Using Gameplay Abilities in Unreal Engine Epic Games
    Local Predicted se ejecuta en cuanto se presiona y el servidor decide al final; Server Initiated no tiene predicción, así que quien la usa percibe la latencia
  3. Understanding Networked Movement in the Character Movement Component for Unreal Engine Epic Games
    El cliente predice y guarda los movimientos, y solo se corrige cuando el error respecto al servidor supera el margen permitido (MAXPOSITIONERRORSQUARED); tras la corrección, vuelve a aplicar los movimientos guardados
  4. Using Network Emulation in Unreal Engine Epic Games
    Pruebas con latencia mínima y máxima y porcentaje de pérdida de paquetes en el servidor y el cliente; en la consola se configura con comandos como NetEmulation.PktLag
  5. tc-netem(8) — Linux manual page iproute2
    Herramienta de pruebas que imita una red real añadiendo latencia y jitter (delay TIME JITTER) y pérdida (loss random PERCENT) a los paquetes salientes

Ver también

Misma capa: Diseño del netcode

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

Ver la ficha interactiva con gráficos y simulaciones