Симуляція лагів в іграх і втрати пакетів
Мережевий код пишуть на локальному з’єднанні з пінгом 1 мс, а тестують гравці на вайфаї готелю. Це закриває розрив на вашій власній машині, лише на процесі гри, поки решта комп’ютера лишається придатною до роботи.
Почніть тут
Спрямуйте на клієнт гри, дайте йому реалістичне погане з’єднання й дозвольте самому зупинитися через п’ять хвилин:
BeanNetworkTester.exe --latency 120 --jitter 60 --loss 3 --target mygame.exe --duration 300
Для цього є і готова часова шкала: overloaded-game-server.json у теці scenarios веде з’єднання в перевантаження й назад, щоб ви бачили, як клієнт упорається з обома напрямками зміни. Дивіться сценарії в часі.
Чому гра показує втрату, а браузер ні
Більшість ігрового трафіку це UDP, а UDP немає за чим ховати втрату. Вебсторінка через TCP тихо повторює передавання й просто довше вантажиться, тому браузер може здаватися нормальним при 5 % втрат, а матч за тих самих 5 % смикається, відкочує персонажа й втрачає синхронізацію.
Це робить гру чесним місцем для перевірки втрат: що ви задали, те клієнт і відчуває.
Що задати і що воно виявляє
| Налаштування | Спробуйте | Що воно виявляє |
|---|---|---|
| Затримка | від 80 до 250 мс | Передбачення й інтерполяцію. Чи не відкочується ваш персонаж після пострілу? |
| Джитер | від 40 до 100 мс | Буферизацію. Стабільні 200 мс приховати легше, ніж пінг, що постійно рухається. |
| Втрата | від 2 до 10 % | Пропущені оновлення стану й те, чи клієнт відновлюється, чи розходиться. |
| Стрибки | 1 секунда, рідко | Зависання, яке спричиняє передавання між вежами. Зазвичай найпотворніше. |
| Вмикання й вимикання каналу | цикл 10 с, 30 % простою | Повторне підключення та повторний вхід. |
Вимірюйте джитер як різницю між 95-м перцентилем і медіаною, а не як середнє: джитер ледве рухає середнє, тому запуск може на папері виглядати однаково, а грається інакше.
Для порівняння двох збірок потрібен seed
Випадкова втрата робить два запуски різними, тож «нова збірка здається гіршою» не є доказом. Той самий seed відтворює ту саму втрату й той самий джитер, що перетворює відчуття на порівняння:
BeanNetworkTester.exe --latency 120 --jitter 60 --loss 5 --seed 42 --target mygame.exe --duration 180
Чого воно не вміє
Воно формує трафік вашої машини. Воно не сповільнює сервер, не змінює його частоту тіків і не ставить інших гравців на погане з’єднання, тож перевіряє ваш клієнт на поганому каналі, а не ваш сервер під навантаженням. Для серверної частини потрібне навантажувальне тестування, а для лобі, повного поганих з’єднань, потрібна не одна машина.