Экспертиза уровня ДТФ или как устроена сеть в Palworld и Helldivers 2
Совмещаю приятное с полезным. Тыкаю носом слишком самоуверенного дтфера в его короткие штаны и заодно объясняю, как работает сетевая составляющая в играх-рекордсменах.
Контекст
На прошлой неделе у Helldivers 2 были проблемы с серверами. Один из пользователей ДДТ отметил, что большой интерес игроков можно было предвидеть, ведь например у Palworld было 3 миллиона онлайна.
Что же не так с ответом Клуба навозных жуков, помимо того, что он написан в высокомерно-дегенератской манере ДВД? Он совершенно неверный. Но все равно умудрился собрать 80 лайков. Челы блять. Аахаххаха. Зачем позоритесь-то?
Что такое p2p и что там у покемонов?
P2P, или «peer-to-peer», это как вечеринка, где каждый приносит что-то вкусное и делится этим с другими. Нет «главного шефа» (сервера), который бы готовил и раздавал всем еду. Вместо этого каждый участник (клиент) сам занимается своим обслуживанием.
В такой сети клиентам приходится доверять друг другу. И если один из клиентов говорит, что поймал покемона, то все остальные клиенты ему верят и удаляют его на своей стороне.
P2P может быть построена через реле или представлять собой меш. Реле — это такой легковесный сервер, который передает и валидирует сообщения игроков. А в меше каждый клиент сам отвечает за передачу своих сообщений другим.
Среди плюсов этого подхода, действительнго, снижение расходов на инфраструтуру. Ведь если ты подключил двух игроков друг к другу, то от тебя вообще не требуется наличие сервера и каких либо вычислительных мощностей.
Поэтому у Palworld'a был такой гладкий старт? Нет. Palworld не использует P2P
UE5
Palworld написана на Unreal Engine 5, который использует клиент-серверную архитектуру. Теоретически, ничто не мешает даже на UE5 написать P2P сеть. Но а на практике — это как купить Теслу и переделать ее под бензиновый двигатель.
Для такой архитектуру действительно требуется больше серверов и мощностей. И Pocket Pair разрешила игрокам самим хостить их. Для этого в UE есть два режима: Listen Server и Dedicated Server.
В Listen Server один из клиентов (хост) выступает сервером. Он берет на себя дополнительную нагрузку: AI, физику, игровую логику. Получется, по сравнению с одиночной игрой, твой ПК начинает обслуживать не только тебя, но и твоих корешей. Зато ты в это время с кайфом играешь прямо на сервере без сетевых лагов или потерь пакетов.
На Dedicated Server локально никто не играет. Чтобы работать более эффективно такой сервер опускает просчеты графики, звука, UI и прочих ориентированных на клиент систем.
Что интересно, даже одиночные (Standalone) игры на UE написаны на схожий манер
The game is running as a server, that does not accept connections from remote clients.... It will run both server-side logic and client-side logic as appropriate for the local players.
А у Helldivers 2?
А вот Helldivers 2 как раз и использует P2P архитектуру. Это значит, что каждый клиент слепо доверяет другим клиентам, и нет одного авторитарного сервера, которому можно было верить. Поэтому-то, мы и имеем кернел-левел ёба-защиту на клиенте.
Я писал, что такой подход менее требователен, но старт у Helldivers 2 был заметно мучительней клиент-серверного Palworld. Всё из-за того, что каждая игровая сессия все равно должна общаться с серверами. В основном это матчмейкер и мастер-сервера. Они нужные для поиска и подключения к играм, социальных фич, сохранения прогресса и так далее. Так же у Helldivers 2 есть сервера на которых развернут мета-гейм — галактическая война в которой принимают участие все клиенты.
А почему мы должны верить тебе, а не Клубу навозных жуков?
Helldivers 2 написана на довольно интересном движке Stingray. Его перестали поддерживать году так в 2018. После этого студия получила все исходники и сама продолжила работу над ним. Какое сетевое решение было у него по умолчанию я не знаю. В любом случае Arrowhead не стали экспериментировать и выбрали знакомую им по работе с оригинальными Hellidvers P2P сеть.
В игре могут быть сотни сущностей: игроки, враги, NPC, гранаты, снаряды. Контроль над ними разделен между клиентами. Используется модель master-slave. Ваш клиент будет обрабатывать всё, что у него находится в массивах master. Отправлять это другим клиентам, а взамен получать пакеты для slave-сущностей.
Если вы сагрите пачку жуков, то произойдет миграция: контроль над ними перейдет вашему клиенту и вы станете их мастером. Это очень клевый и сложный момент. Такой подход сразу нивелирует пинг и разного рода рассинхроны. А сложность — это вообще один из главных недостатков P2P сетей наравне с секьюрностью.
И кстати. У HD2 уже больше 7 миллионов копий. Только тихо! Я вам этого не говорил.