Война с задержками начинается с задержек
Вы загружаете свою любимую игру, готовые разнести в щепки инопланетян или спрятаться в шкафу на тридцать минут, но обнаруживаете, что ваш игрок продолжает таинственным образом телепортироваться по карте. В один момент вы упираетесь в стену, в другой - зависаете в пятидесяти футах над пропастью. Вы пытаетесь разить врагов, несущихся на вас, но ваши пули, кажется, поражают только воздух.
К сожалению, это не магические способности. Это лаг. И он может испортить геймплей и впечатления игрока. Пули не регистрируются. Персонажи постоянно дрожат. И ваши игроки все больше и больше расстраиваются.
Кто виноват? Лаг. Точнее, плохая задержка. Но что такое задержка? Почему она так важна? И что вы можете сделать для ее улучшения?
Что такое задержка?
Если вы хотите понять, что такое задержка - и почему она имеет значение, - вам также нужно понять, что такое пропускная способность.
- Задержка измеряет время. Это то, сколько времени требуется пакету данных, чтобы перейти от одного компьютера к другому - измеряется в миллисекундах. Чем выше число, тем больше времени требуется.
- Пропускная способность измеряет размер. Это то, сколько данных вы можете вместить в один момент времени. Чем выше число, тем больше данных вы получаете за один раз.
Это как труба. Пропускная способность - это ширина трубы, сколько воды она может вместить. Задержка - это скорость движения воды по трубе. При разработке программного обеспечения важно учитывать оба фактора.
Обычно, когда вы просматриваете веб-страницы или скачиваете особенно большой файл, задержка не так уж важна. Если вы можете получать 100 мегабит в секунду - пропускная способность - не имеет значения, сколько времени занимает каждый пакет: 1 миллисекунду или 100. Вы не заметите разницы.
В крайних случаях пропускная способность имеет гораздо большее значение, чем задержка. Например, если вам нужно передать абсолютно огромный объем данных. Если вы буквально возьмете жесткий диск, просто пойдете к соседу и подключите его к его компьютеру, это будет гораздо быстрее. У него будет очень высокая пропускная способность, но и очень высокая (медленная) задержка. (Забавный факт, это называется sneakernet).
Но в многопользовательской игре вы не отправляете огромные файлы. Вы отправляете много маленьких. Поэтому эти миллисекунды имеют значение. Вам нужна низкая задержка.
Низкая задержка ведет к более справедливым играм
Когда все находятся в равных условиях, никто не получает преимущества. Представьте, что в матче участвуют два игрока: Алиса и Боб. У Алисы гораздо больше задержек, чем у Боба. Если они выйдут из-за угла и начнут стрелять друг в друга, то преимущество будет на стороне Алисы:
- Алиса увидит Боба раньше, чем Боб увидит ее (что даст ей возможность среагировать первой).
- Выстрел Алисы будет зарегистрирован раньше, чем выстрел Боба.
Есть способы избежать этой проблемы. Можно регистрировать попадание на стороне игрока, а не на сервере. Но это может привести к тому, что бедная Алиса получит пулю, хотя на ее экране она уже успела спрятаться за укрытие. Не идеальный вариант.
Когда у игроков примерно одинаковая задержка, ни один из них не получает несправедливого преимущества.
Но почему у некоторых игроков задержка действительно плохая?

Физическое расстояние имеет значение
Так почему у Алисы может быть очень низкая задержка, а у Боба - очень высокая? Обычно все сводится к тому, как далеко они находятся от сервера. Свет - это быстро, но это не волшебство. Ему все равно требуется время. А Земля массивна. Чтобы добраться из Северной Америки в Африку, свету требуется около 40 миллисекунд. А это значит, что это самая лучшая задержка, которую вы можете получить.
Однако это еще не вся история. Маршрут, по которому передаются данные, тоже имеет значение. Это похоже на то, как если бы вы планировали дорожное путешествие. Один маршрут может пролегать по скоростным дорогам и практически как ворон летит. А другой может пролегать в глуши, и вам придется ехать по грунтовым дорогам, петляя и сворачивая. Точно так же, если ваши данные идут по прямому маршруту, они просто будут быстрее.
Их локальная сеть может быть никудышной.
Тип сети тоже имеет значение. Если они пользуются общественным wifi - с сотней других людей, засоряющих эфир, - на передачу данных уйдет немало времени.
Как и в нашем примере с планированием маршрута, здесь также имеет значение интенсивность движения на каждой дороге. Даже если вы едете по прямому пути, вас могут тормозить все остальные.
Такое часто случается в локальной сети игрока. В доме есть другие люди, которые занимают линию и в целом замедляют работу. И это та область, которую вы не можете контролировать.
Добавьте задержку в матчмейкинг
Чтобы ваша игра проходила как можно более гладко и честно, нужно постараться снизить задержку.
Если вы хотите, чтобы ваша игра была действительно эффективной, мы рекомендуем добавить способ проверки задержки игрока в процессе подбора пары. Добавьте проверку и соединяйте игроков только в том случае, если они находятся в пределах определенного порога друг от друга. Для реализации такой системы может потребоваться найм удаленной команды разработчиков.


