Добавьте задержку и джиттер приложению
На быстром локальном соединении всё работает. Дайте приложению 300 мс пинга, и вы узнаете, какие экраны написаны так, будто ответ приходит мгновенно.
Три разные вещи
| Настройка | Что делает | Откуда берётся в жизни |
|---|---|---|
| Latency | Добавляет одинаковую задержку каждому пакету, в миллисекундах. | Расстояние. Сервер на другом континенте или спутник. |
| Jitter | Добавляет сверху случайную величину, так что задержка постоянно меняется. | Общий Wi-Fi, мобильные сети, всё, что перегружено. |
| Всплески задержки | Редкие долгие зависания, заданные частотой и длительностью. | Передача между сотовыми вышками, перегруженный маршрутизатор. |
Все три значения задаются в миллисекундах и могут работать вместе. Оба значения задержки принимают любое число от 0, так что можно перейти от правдоподобных 40 мс к абсурдным 60 секундам.
Из командной строки
Стабильные 200 мс с джиттером 80 мс для одного приложения:
BeanNetworkTester.exe --latency 200 --jitter 80 --target myapp.exe --duration 60
А теперь редкие долгие зависания: примерно один пакет из двадцати ждёт лишнюю секунду:
BeanNetworkTester.exe --spike-prob 5 --spike-ms 1000 --target myapp.exe
Значения, которые стоит попробовать
- 40 мс: сервер в той же стране. Ничего не должно измениться.
- 150 мс: другой континент. Всё, что много общается, начинает казаться медленным, потому что каждый обмен чего-то стоит.
- 600 мс и больше: геостационарный спутник или Wi-Fi в самолёте. Здесь индикаторы выполнения застывают, а логика повторных попыток наконец-то срабатывает.
Готовые профили содержат измеренные значения: «Distant server (another continent)», «Satellite (low orbit)», «Satellite (geostationary)», «In-flight Wi-Fi», «LTE / 4G».
Как измерять: смотрите на худший случай, а не на среднее
Джиттер почти не сдвигает среднее и почти не сдвигает медиану. Запуск с джиттером 30 мс и запуск без него могут показать почти одинаковый «типичный» пинг, хотя ощущения будут совершенно разными.
Сравнивайте вместо этого 95-й перцентиль с медианой. Разница между ними и есть джиттер, и именно она делает звонок рваным, а игру неиграбельной, хотя среднее выглядит нормально.