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

Libro blanco del lag en juegos › L1 Proceso del juego en el cliente

Error de sincronización del reloj Clock sync error

ID de la causa cg-clock · Responsable principal Desarrollo de cliente (Equipo de desarrollo)

Abrir la ficha interactiva con gráficos y simulaciones →

Si la hora del servidor que estima el cliente es errónea, el momento de interpolación y la validación de los cooldowns quedan desfasados.

Por qué La hora del servidor se sincroniza una sola vez al conectar y no se ajusta aunque cambie el ping → Efecto El momento de interpolación y la hora en que termina el cooldown se desfasan respecto al servidor → En pantalla El otro jugador da un tirón de vez en cuando; el cooldown ya terminó y aun así la habilidad se rechaza

Síntomas
Tirones, Acción perdida / rollback
Factores
Latencia
A quién afecta
Solo yo
Cuándo
Cuanto más tiempo lleva encendido, De vez en cuando, al azar
Responsable
Responsable principal Desarrollo de cliente (Equipo de desarrollo)
Tareas (Equipo de desarrollo)
Sincronizar la hora periódicamente (medir el tiempo de ida y vuelta y corregir), ajustarla poco a poco y sin saltos bruscos, medir el tiempo transcurrido con un reloj monotónico (monotonic clock), sin usar la hora del sistema.
En el gráfico
Subida gradual · Error de la hora estimada del servidor
Dónde mirar
Registrar periódicamente la diferencia entre la hora del servidor que estima el cliente y la que el servidor envía en los paquetes (número de tick)
Se confirma si
El error crece a medida que pasa el tiempo desde la conexión, o salta de golpe cuando se ajusta el reloj del sistema, y en esos momentos aumentan los reportes de habilidades rechazadas y tirones
Se descarta si
Si el error se mantiene pequeño y aun así se rechazan habilidades, apunta a la validación del servidor o a la latencia
Se verifica con
Requiere logs y métricas del servidor o el cliente del juego
Para saber más
Si el tiempo transcurrido se mide con la fecha y hora del sistema (reloj de pared, wall clock), la hora del juego salta en el momento en que Windows corrige el reloj con la hora de internet o el usuario lo cambia. El tiempo transcurrido hay que medirlo con un reloj monotónico, que nunca retrocede (monotonic clock, como Stopwatch).

Fuentes

  1. RFC 5905: Network Time Protocol Version 4: Protocol and Algorithms Specification IETF
    Método que calcula la latencia de ida y vuelta y el desfase del reloj a partir de las cuatro marcas de tiempo de la solicitud y la respuesta
  2. Acquiring high-resolution time stamps Microsoft
    QueryPerformanceCounter (el que usa Stopwatch) es un reloj para medir tiempo transcurrido que no se sincroniza con la hora externa; la hora del sistema solo se usa cuando hace falta la hora UTC
  3. Time synchronization (Netcode for Entities 6.5) Unity
    Estima la hora del servidor a partir del tiempo de ida y vuelta y la ajusta modificando poco a poco la velocidad de avance, sin cambios bruscos de hora

Ver también

Misma capa: L1 Proceso del juego en el cliente

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

Ver la ficha interactiva con gráficos y simulaciones