Simulează lag și pierdere de pachete în jocuri
Netcode-ul se scrie pe o conexiune locală cu 1 ms de ping și este testat de jucători pe wifi de hotel. Asta închide acea prăpastie pe propriul tău calculator, doar pe procesul jocului, în timp ce restul calculatorului rămâne utilizabil.
Începe aici
Țintește clientul jocului, dă-i o conexiune proastă realistă și lasă-l să se oprească singur după cinci minute:
BeanNetworkTester.exe --latency 120 --jitter 60 --loss 3 --target mygame.exe --duration 300
Există și o cronologie gata făcută pentru asta: overloaded-game-server.json din folderul scenarios duce o conexiune în congestie și o scoate înapoi, ca să vezi cum tratează clientul ambele sensuri ale schimbării. Vezi scenarii în timp.
De ce arată un joc pierderi când un browser nu
Cea mai mare parte a traficului de joc este UDP, iar UDP nu are în spatele cui să ascundă pierderea. O pagină web peste TCP retransmite pe tăcute și doar durează mai mult, de aceea un browser poate părea în regulă la 5% pierderi, în timp ce un meci la aceleași 5% se blochează, aruncă personajul înapoi și se desincronizează.
Asta face din joc locul cinstit pentru a testa pierderea: ce setezi este ce experimentează de fapt clientul.
Ce să setezi și ce expune
| Setare | Încearcă | Ce expune |
|---|---|---|
| Latență | 80 până la 250 ms | Predicția și interpolarea. Alunecă personajul tău înapoi după o lovitură? |
| Jitter | 40 până la 100 ms | Buffering-ul. Un ping stabil de 200 ms se ascunde mai ușor decât unul care tot se schimbă. |
| Pierdere | 2 până la 10% | Actualizările de stare lipsă și dacă clientul își revine sau derapează. |
| Salturi | 1 secundă, rar | Blocajul provocat de un transfer între turnuri. De obicei cel mai urât. |
| Legătură pornită și oprită | ciclu de 10 s, 30% pauză | Reconectare și reintrare. |
Măsoară jitterul ca diferența dintre percentila 95 și mediană, nu ca medie: jitterul abia mișcă o medie, de aceea o rulare poate arăta identic pe hârtie și se poate juca diferit.
Compararea a două build-uri cere un seed
Pierderea aleatorie face două rulări diferite, deci „noul build se simte mai rău” nu e o dovadă. Același seed reia aceeași pierdere și același jitter, ceea ce transformă o senzație într-o comparație:
BeanNetworkTester.exe --latency 120 --jitter 60 --loss 5 --seed 42 --target mygame.exe --duration 180
Ce nu poate face
Acesta modelează traficul calculatorului tău. Nu încetinește serverul, nu îi schimbă rata de tick și nu pune alți jucători pe o conexiune proastă, deci testează clientul tău pe o legătură proastă, nu serverul tău sub încărcare. Pentru partea de server ai nevoie de teste de încărcare, iar pentru un lobby plin de conexiuni proaste ai nevoie de mai mult de o mașină.