Spiele-Lag und Paketverlust simulieren
Netcode wird auf einer lokalen Verbindung mit 1 ms Ping geschrieben und von Spielern im Hotel-WLAN getestet. Das hier schließt diese Lücke auf deinem eigenen Rechner, nur für den Spielprozess, während der Rest des Computers nutzbar bleibt.
Hier anfangen
Ziele auf den Spielclient, gib ihm eine realistische schlechte Verbindung und lass es nach fünf Minuten von selbst enden:
BeanNetworkTester.exe --latency 120 --jitter 60 --loss 3 --target mygame.exe --duration 300
Dafür gibt es auch eine fertige Zeitleiste: overloaded-game-server.json im Ordner scenarios führt eine Verbindung in die Überlastung und wieder heraus, sodass du beobachten kannst, wie der Client beide Richtungen der Änderung verkraftet. Siehe Szenarien über die Zeit.
Warum ein Spiel Verlust zeigt und ein Browser nicht
Der meiste Spieleverkehr ist UDP, und bei UDP gibt es nichts, womit sich Verlust verstecken ließe. Eine Webseite über TCP überträgt still erneut und braucht nur länger. Deshalb kann sich ein Browser bei 5 % Verlust gut anfühlen, während ein Match bei denselben 5 % ruckelt, zurückspringt und aus dem Takt gerät.
Das macht ein Spiel zum ehrlichen Ort, um Verlust zu testen: Was du einstellst, ist das, was der Client tatsächlich erlebt.
Was du einstellen solltest und wonach es sucht
| Einstellung | Probiere | Was es aufdeckt |
|---|---|---|
| Latenz | 80 bis 250 ms | Vorhersage und Interpolation. Rutscht deine Spielfigur nach einem Schuss zurück? |
| Jitter | 40 bis 100 ms | Pufferung. Konstante 200 ms lassen sich leichter verstecken als ein Ping, der sich ständig bewegt. |
| Verlust | 2 bis 10 % | Fehlende Zustandsupdates und ob sich der Client erholt oder davondriftet. |
| Spitzen | 1 Sekunde, selten | Der Aussetzer, den eine Funkzellenübergabe verursacht. Meist der hässlichste. |
| Verbindung ein und aus | 10 s Zyklus, 30 % aus | Wiederverbinden und Wiedereinsteigen. |
Miss Jitter als Abstand zwischen dem 95. Perzentil und dem Median statt als Durchschnitt: Jitter bewegt einen Durchschnitt kaum, und deshalb kann ein Durchlauf auf dem Papier identisch aussehen und sich doch anders spielen.
Zwei Builds zu vergleichen, braucht einen Seed
Zufälliger Verlust macht zwei Durchläufe verschieden, „der neue Build fühlt sich schlechter an“ ist also kein Beweis. Derselbe Seed spielt denselben Verlust und denselben Jitter ab und macht aus einem Gefühl einen Vergleich:
BeanNetworkTester.exe --latency 120 --jitter 60 --loss 5 --seed 42 --target mygame.exe --duration 180
Was es nicht kann
Es formt den Datenverkehr deines Rechners. Es verlangsamt den Server nicht, ändert nicht dessen Tick-Rate und versetzt keine anderen Spieler in eine schlechte Verbindung, sodass es deinen Client gegen eine schlechte Verbindung testet, nicht deinen Server unter Last. Für die Serverseite brauchst du Lasttests, und für eine Lobby voller schlechter Verbindungen brauchst du mehr als einen Rechner.