Bean Network Tester

Имитация лагов и потери пакетов в играх

Сетевой код пишут на локальном соединении с пингом 1 мс, а тестируют игроки в Wi-Fi отеля. Этот инструмент закрывает разрыв на вашей собственной машине, только для процесса игры, пока остальной компьютер остаётся пригодным для работы.

С чего начать

Нацельтесь на клиент игры, дайте ему реалистично плохое соединение и пусть он сам остановится через пять минут:

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

Чего он не умеет

Он формирует трафик вашей машины. Он не замедляет сервер, не меняет его частоту тиков и не переводит других игроков на плохое соединение, поэтому проверяет ваш клиент на плохом канале, а не ваш сервер под нагрузкой. Для серверной стороны нужно нагрузочное тестирование, а для лобби, полного плохих соединений, нужна не одна машина.

Что дальше

Готовы намеренно сломать собственную сеть?

Скачать для Windows