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

Guia do Lag em Jogos › Design de sincronização

Taxa de envio de snapshots baixa Low snapshot / update rate

ID da causa sy-low-send-rate · Responsável principal Desenvolvimento do servidor (Equipe de desenvolvimento) · Também envolvidos Desenvolvimento do cliente (Equipe de desenvolvimento)

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

Se o servidor manda as atualizações de posição (snapshots) só algumas vezes por segundo, o buffer de interpolação precisa ser mais longo na mesma medida, e você vê os outros personagens mais no passado.

Por quê Para economizar banda, as atualizações de posição saem só 5–10 vezes por segundo → Efeito Para desenhar com suavidade, o buffer precisa ter 2 vezes o intervalo entre pacotes (200–400 ms); se for curto, basta perder um pacote para os personagens pararem → Na tela As mudanças de direção do adversário aparecem tarde e divergem das decisões do servidor. Com buffer curto, engasgos, e teleporte quando há perda de pacotes

Sintomas
Engasgos, Teleporte, Ação perdida / rollback
Fatores
Latência, Perda de pacotes
Quem é afetado
Servidor inteiro
Quando
Sempre
Responsável
Responsável principal Desenvolvimento do servidor (Equipe de desenvolvimento) · Também envolvidos Desenvolvimento do cliente (Equipe de desenvolvimento)
O que fazer (Equipe de desenvolvimento)
Servidor: enviar com frequência para alvos próximos ou em combate e raramente para os distantes, enviar só o que mudou (compressão delta) para reduzir o tamanho de cada envio e aumentar a frequência. Cliente: ajustar automaticamente o tamanho do buffer de interpolação ao intervalo entre pacotes.
Números de referência
Com 10 por segundo, o intervalo entre pacotes é de 100 ms e o buffer, de 200 ms. Somando os 75 ms de um sentido de um ping de 150 ms, você vê o adversário cerca de 0,3 s no passado.
No gráfico
Sempre alto desde o início · Intervalo de chegada dos pacotes por cliente, tamanho do buffer de interpolação
Onde olhar
Em uma captura de pacotes no servidor, filtrar só o fluxo para um jogador e ver pacotes por segundo e intervalos no I/O Graphs do Wireshark. Com logs do jogo, ver junto o intervalo de atualização por entidade e a folga do buffer de interpolação do cliente (tempo restante até o próximo snapshot)
Confirma se
As atualizações de posição são sempre escassas, 5–10 por segundo (intervalo de 100–200 ms), e o buffer de interpolação passa de 200 ms ou a folga do buffer chega a 0 com frequência
Descarta se
Atualizações saem com frequência, mas só o intervalo de chegada oscila: aponta para jitter ou perda de pacotes. Só entidades distantes chegam raramente em lugares lotados: aponta para “Orçamento de envio e prioridade por conexão”
Como verificar
Ferramentas de infra (sem precisar do código do jogo)

Fontes

  1. Latency Compensating Methods in Client/Server In-game Protocol Design and Optimization (Yahn W. Bernier, GDC 2001) Valve
    Com 10 atualizações por segundo, uma interpolação de 200 ms aguenta uma perda. O padrão do Half-Life é 20 por segundo com interpolação de 100 ms
  2. Snapshot Interpolation Gaffer On Games
    Com 10 por segundo, aguentar até duas perdas seguidas exige 350 ms de atraso; com 30 por segundo, cai para 150 ms
  3. State Synchronization Gaffer On Games
    Acumulação de prioridade para enviar com mais frequência as entidades importantes, e envio do resto em rodízio dentro do limite de banda
  4. 8.8. The “I/O Graphs” Window Wireshark
    Desenha em gráfico, por intervalo de tempo, o número de pacotes e bytes que batem com o filtro de exibição

Veja também

Mesma camada: Design de sincronização

Mesmo sintoma (Engasgos) em outras camadas

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