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

Guia do Lag em Jogos › L1 Processo do jogo no cliente

Erro na sincronização do relógio Clock sync error

ID da causa cg-clock · Responsável principal Desenvolvimento do cliente (Equipe de desenvolvimento)

Abrir o card interativo, com figuras e simulações →

Se a hora do servidor estimada pelo cliente estiver errada, o momento da interpolação e a decisão sobre o cooldown ficam desalinhados com o servidor.

Por quê A hora do servidor é ajustada uma única vez, na conexão, e fica assim mesmo quando o ping muda → Efeito O momento da interpolação e a hora em que o cooldown termina ficam desalinhados com o servidor → Na tela O adversário dá um engasgo de vez em quando; o cooldown acabou, mas o servidor recusa a skill

Sintomas
Engasgos, Ação perdida / rollback
Fatores
Latência
Quem é afetado
Só eu
Quando
Quanto mais tempo ligado, Aleatoriamente, de vez em quando
Responsável
Responsável principal Desenvolvimento do cliente (Equipe de desenvolvimento)
O que fazer (Equipe de desenvolvimento)
Sincronizar o horário periodicamente (medir o tempo de ida e volta e corrigir), fazer o ajuste aos poucos (sem saltos bruscos), medir o tempo decorrido com um monotonic clock, que não depende da hora do PC.
No gráfico
Subida lenta · Erro da hora estimada do servidor
Onde olhar
Registrar periodicamente a diferença entre a hora do servidor estimada pelo cliente e a hora do servidor (número do tick) que vem nos pacotes
Confirma se
O erro cresce conforme passa o tempo desde a conexão, ou dá um salto de uma vez no instante em que o relógio do PC é acertado, e nessa mesma época aumentam os reports de skill recusada e de engasgos
Descarta se
Erro pequeno e estável, mas skills ainda recusadas: aponta para a decisão do servidor ou para a latência
Como verificar
Exige logs e métricas do servidor ou do cliente do jogo
Saiba mais
Se o tempo decorrido for medido pela data e hora do PC (wall clock), a hora do jogo dá um salto quando o Windows acerta o relógio pela hora da internet ou quando o jogador muda o relógio. O tempo decorrido precisa ser medido com um monotonic clock, que nunca anda para trás (Stopwatch, por exemplo).

Fontes

  1. RFC 5905: Network Time Protocol Version 4: Protocol and Algorithms Specification IETF
    Método que calcula a latência de ida e volta e o erro do relógio a partir dos quatro instantes da requisição e da resposta
  2. Acquiring high-resolution time stamps Microsoft
    QueryPerformanceCounter (usado pelo Stopwatch) é um relógio para tempo decorrido que não se sincroniza com uma hora externa; a hora do sistema só deve ser usada quando se precisa da hora UTC
  3. Time synchronization (Netcode for Entities 6.5) Unity
    Estima a hora do servidor pelo tempo de ida e volta e, sem mudar a hora de forma brusca, ajusta aos poucos a velocidade com que o tempo avança

Veja também

Mesma camada: L1 Processo do jogo no cliente

Mesmo sintoma (Engasgos) em outras camadas

Ver o card interativo, com figuras e simulações