Simule lag e perda de pacotes em jogos
O netcode é escrito em uma conexão local com 1 ms de ping e testado por jogadores no Wi-Fi de um hotel. Isto fecha essa lacuna na sua própria máquina, só no processo do jogo, enquanto o resto do computador continua utilizável.
Comece aqui
Mire no cliente do jogo, dê a ele uma conexão ruim realista e deixe parar sozinho depois de cinco minutos:
BeanNetworkTester.exe --latency 120 --jitter 60 --loss 3 --target mygame.exe --duration 300
Também há uma linha do tempo pronta para isso: overloaded-game-server.json, na pasta scenarios, leva uma conexão à congestão e de volta, para você ver como o cliente lida com os dois sentidos da mudança. Veja cenários no tempo.
Por que um jogo mostra perda e um navegador não
A maior parte do tráfego de jogos é UDP, e o UDP não tem nada para esconder a perda. Uma página web sobre TCP retransmite em silêncio e só demora mais, e por isso um navegador pode parecer bem com 5% de perda enquanto uma partida com os mesmos 5% engasga, volta no tempo e perde a sincronia.
Isso faz de um jogo o lugar honesto para testar perda: o que você define é o que o cliente realmente vive.
O que definir e o que isso procura
| Configuração | Teste | O que expõe |
|---|---|---|
| Latência | 80 a 250 ms | Predição e interpolação. O seu personagem volta para trás depois de um tiro? |
| Jitter | 40 a 100 ms | Buffering. Constantes 200 ms são mais fáceis de esconder que um ping que não para de mexer. |
| Perda | 2 a 10% | Atualizações de estado ausentes, e se o cliente se recupera ou se desvia. |
| Picos | 1 segundo, raramente | A travada que uma troca de torre causa. Geralmente a mais feia. |
| Link liga e desliga | ciclo de 10 s, 30% fora do ar | Reconexão e reentrada. |
Meça o jitter como a diferença entre o percentil 95 e a mediana, e não como uma média: o jitter mal mexe em uma média, e é por isso que uma execução pode parecer idêntica no papel e jogar diferente.
Comparar dois builds exige uma semente
A perda aleatória torna duas execuções diferentes, então “o build novo parece pior” não é evidência. A mesma semente reproduz a mesma perda e o mesmo jitter, o que transforma uma sensação em uma comparação:
BeanNetworkTester.exe --latency 120 --jitter 60 --loss 5 --seed 42 --target mygame.exe --duration 180
O que ele não consegue fazer
Isto molda o tráfego da sua máquina. Não deixa o servidor lento, não muda o tick rate dele e não põe outros jogadores em uma conexão ruim, então testa o seu cliente contra um link ruim, não o seu servidor sob carga. Para o lado do servidor, você quer teste de carga, e para um lobby cheio de conexões ruins você quer mais de uma máquina.