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

Guia do Lag em Jogos › L8 Sockets e protocolos

Política para clientes lentos (slow consumer) Slow-consumer policy

ID da causa sk-slow-client · Responsável principal Desenvolvimento do servidor (Equipe de desenvolvimento)

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

Para um cliente cujos dados a enviar não param de acumular, o servidor descarta as atualizações antigas ou derruba a conexão.

Por quê A conexão do cliente não acompanha o volume que o servidor envia → Efeito O servidor descarta atualizações antigas ou, ao passar do limite, encerra a conexão → Na tela Só esse jogador tem teleporte ou desconexão

Sintomas
Teleporte, Desconexão
Fatores
Perda de pacotes
Quem é afetado
Só eu
Quando
Quando junta muita gente
Responsável
Responsável principal Desenvolvimento do servidor (Equipe de desenvolvimento)
O que fazer (Equipe de desenvolvimento)
Reduzir o volume enviado (frequência de atualização conforme a distância), continuar enviando com qualidade menor, reduzir o que fica acumulado no kernel (TCP_NOTSENT_LOWAT no Linux).
Números de referência
Com um buffer de envio de 256 KB, uma conexão de 30 KB/s acumula mais de 8 segundos de dados atrasados. O Linux pode aumentar esse buffer sozinho até vários MB.
No gráfico
Alto só em alguns · Send-Q por conexão, atualizações descartadas por cliente
Onde olhar
Ver o que o servidor do jogo registra por cliente (tamanho da fila de envio, atualizações descartadas, motivo da desconexão) e conferir no servidor, com ss -tni, o Send-Q e o cwnd daquela conexão
Confirma se
Só as conexões dos jogadores que tiveram teleporte ou caíram ficam com Send-Q sempre cheio, e o log do jogo registra descarte de atualizações desses jogadores ou desconexão por estouro da fila de envio
Descarta se
Send-Q vazio, mas com teleporte: o problema não está no envio do servidor. Mais provável: perda na conexão desse jogador (“Perda no trecho sem fio”) ou interpolação na tela
Como verificar
Exige logs e métricas do servidor ou do cliente do jogo

Fontes

  1. IP Sysctl Linux kernel
    tcp_wmem: máximo do buffer de envio ajustado automaticamente, com padrão de 64 KB–4 MB (conforme a memória); tcp_notsent_lowat e TCP_NOTSENT_LOWAT limitam a quantidade de dados ainda não enviados
  2. net/ipv4/tcp_diag.c (Linux v6.12) Linux kernel
    Valores Recv-Q e Send-Q do ss: no socket em escuta, as conexões esperando o accept e o limite do backlog; no socket conectado, os bytes que o app ainda não leu e os bytes enviados ainda sem ACK

Veja também

Mesma camada: L8 Sockets e protocolos

Mesmo sintoma (Teleporte) em outras camadas

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