Symulator lagów i utraty pakietów w grach
Kod sieciowy pisze się na lokalnym łączu z pingiem 1 ms, a testują go gracze na hotelowym WiFi. To zamyka tę różnicę na Twojej maszynie, tylko na procesie gry, gdy reszta komputera zostaje używalna.
Zacznij tutaj
Wyceluj w klienta gry, daj mu wiarygodnie słabe łącze i pozwól zatrzymać się samo po pięciu minutach:
BeanNetworkTester.exe --latency 120 --jitter 60 --loss 3 --target mygame.exe --duration 300
Jest też gotowa linia czasu - overloaded-game-server.json w katalogu
scenarios wprowadza łącze w przeciążenie i z niego wyprowadza, więc widzisz, jak
klient radzi sobie z oboma kierunkami zmiany. Zobacz
scenariusze w czasie.
Dlaczego gra pokazuje stratę, a przeglądarka nie
Większość ruchu gier to UDP, a UDP nie ma czym zasłonić straty. Strona po TCP po cichu retransmituje i po prostu ładuje się dłużej - dlatego przeglądarka może działać znośnie przy 5 procentach straty, gdy mecz przy tych samych 5 procentach się tnie, cofa postacie i traci synchronizację.
To czyni grę uczciwym miejscem do testowania straty: to, co ustawisz, jest tym, czego klient naprawdę doświadcza.
Co ustawić i czego to szuka
| Ustawienie | Spróbuj | Co obnaża |
|---|---|---|
| Latencja | 80 do 250 ms | Predykcję i interpolację. Czy postać cofa się po strzale? |
| Jitter | 40 do 100 ms | Buforowanie. Stałe 200 ms łatwiej ukryć niż ping, który ciągle się rusza. |
| Utrata | 2 do 10 procent | Gubione aktualizacje stanu i to, czy klient wraca, czy odjeżdża. |
| Skoki | 1 sekunda, rzadko | Zacięcie przy przełączeniu nadajnika. Zwykle najbrzydsze. |
| Łącze na przemian | cykl 10 s, 30 procent przerwy | Ponowne łączenie i powrót do rozgrywki. |
Jitter mierz jako różnicę między 95. percentylem a medianą, nie jako średnią - jitter prawie nie rusza średniej, dlatego przebieg może wyglądać identycznie na papierze i grać się inaczej.
Porównanie dwóch buildów wymaga ziarna
Losowa strata sprawia, że dwa przebiegi się różnią, więc "nowy build wydaje się gorszy" nie jest dowodem. To samo ziarno odtwarza tę samą stratę i ten sam jitter, co zamienia wrażenie w porównanie:
BeanNetworkTester.exe --latency 120 --jitter 60 --loss 5 --seed 42 --target mygame.exe --duration 180
Czego to nie potrafi
To kształtuje ruch Twojej maszyny. Nie zwalnia serwera, nie zmienia jego tick rate i nie wsadza innych graczy na słabe łącze - więc testuje Twojego klienta przy złym łączu, a nie serwer pod obciążeniem. Do strony serwerowej służą testy obciążeniowe, a do lobby pełnego słabych łączy potrzebujesz więcej niż jednej maszyny.