Simulace lagu a ztráty paketů ve hrách
Netcode se píše na lokálním spojení s pingem 1 ms a testují ho hráči na hotelovém WiFi. Tohle tu propast zavírá na vašem vlastním počítači, jen na procesu hry, zatímco zbytek počítače zůstává použitelný.
Začněte tady
Zaměřte se na herního klienta, dejte mu realistické špatné spojení a nechte ho po pěti minutách zastavit samotného:
BeanNetworkTester.exe --latency 120 --jitter 60 --loss 3 --target mygame.exe --duration 300
K tomu existuje i hotová časová osa: overloaded-game-server.json ve složce scenarios provede spojení přetížením a zase zpět, takže uvidíte, jak klient zvládá oba směry změny. Viz scénáře v čase.
Proč hra ukazuje ztrátu, když prohlížeč ne
Většina herního provozu je UDP a UDP nemá, za čím ztrátu schovat. Webová stránka přes TCP tiše odesílá znovu a jen trvá déle, proto se prohlížeč může při 5 % ztrát zdát v pořádku, zatímco zápas při stejných 5 % sekne, vrací postavy a desynchronizuje se.
Díky tomu je hra poctivým místem pro test ztráty: co nastavíte, to klient skutečně zažije.
Co nastavit a co to odhalí
| Nastavení | Zkuste | Co to odhalí |
|---|---|---|
| Zpoždění | 80 až 250 ms | Predikci a interpolaci. Sklouzne vaše postava po výstřelu zpět? |
| Jitter | 40 až 100 ms | Vyrovnávání. Stálých 200 ms se schovává snáz než ping, který se pořád mění. |
| Ztráta | 2 až 10 % | Chybějící aktualizace stavu a to, zda se klient zotaví, nebo se rozejde. |
| Skoky | 1 sekunda, zřídka | Zadrhnutí, které způsobí předání mezi věžemi (základnovými stanicemi). Obvykle to nejhorší. |
| Zapínání a vypínání linky | cyklus 10 s, 30 % výpadek | Opětovné připojení a návrat do hry. |
Jitter měřte jako rozdíl mezi 95. percentilem a mediánem, a ne jako průměr: jitter průměr sotva pohne, a proto může běh na papíře vypadat stejně a hrát se jinak.
Porovnání dvou buildů potřebuje seed
Náhodná ztráta dělá dva běhy různými, takže „nový build je horší“ není důkaz. Stejný seed přehraje stejnou ztrátu a stejný jitter, čímž se pocit mění v porovnání:
BeanNetworkTester.exe --latency 120 --jitter 60 --loss 5 --seed 42 --target mygame.exe --duration 180
Co to neumí
Tohle tvaruje provoz vašeho počítače. Nezpomalí server, nezmění jeho tick rate a nedá ostatní hráče na špatné spojení, takže testuje vašeho klienta proti špatné lince, ne váš server pod zátěží. Pro stranu serveru potřebujete zátěžové testování a pro lobby plné špatných spojení více než jeden počítač.