ID da causa sk-hol · Responsável principal Desenvolvimento do servidor (Equipe de desenvolvimento) · Também envolvidos Desenvolvimento do cliente (Equipe de desenvolvimento)
Para manter a ordem, o TCP não entrega ao jogo os pacotes que chegaram depois enquanto não receber de novo o pacote perdido.
Por quê Um pacote se perde → Efeito Os pacotes seguintes chegam, mas ficam esperando no buffer de recepção → Na tela Para e depois libera tudo de uma vez: avanço rápido
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: usar UDP para posições em tempo real, entrega confiável só para o que for indispensável, dividir em vários streams. Cliente: mudar o tratamento de rede para o mesmo modelo do servidor (UDP, canais separados).
Números de referência
Perder um pacote causa uma parada de pelo menos um tempo de ida e volta, e mais um pouco. Se a retransmissão também se perder, a parada vai de centenas de ms a alguns segundos.
No gráfico
Lacuna e depois tudo junto · Volume recebido por conexão, retransmissões
Onde olhar
Ver, numa captura de pacotes do lado do servidor (tcpdump ou Wireshark), os pacotes retransmitidos na conexão daquele jogador e as lacunas antes e depois deles; para o servidor inteiro, ver o aumento de TcpRetransSegs no nstat -az
Confirma se
A parada começa com a retransmissão de um único pacote, e os dados acumulados são processados todos de uma vez logo depois que o pacote retransmitido chega (o volume recebido fica em 0 e depois vem tudo junto)
Descarta se
Jogo que se comunica por UDP: não se aplica. Parada sem retransmissão: verificar o tick do servidor (“Estouro do tick”)
Como verificar
Ferramentas de infra (sem precisar do código do jogo)