@MrProper5050

Как работают сессии матчей в онлайн играх?

Меня интересует вопрос из гейм-дева: Как работают сессии матчей в мультиплеерных играх?
Является ли каждая игровая сессия, в которой сидит по 10 игроков, новым процессом на сервере? Или это реализовано как-то по другому?
Хочу написать свою мультиплеерную игру для тренировки и вот этот вопрос я не понимаю до конца.

Надеюсь на ваш ответ.
  • Вопрос задан
  • 108 просмотров
Решения вопроса 1
dollar
@dollar
На чёткий вопрос - чёткий ответ.
Зависит от количества игроков и от самой игры.

С учётом того, что отдельные сессии независимы друг от друга (никак не связаны и не влияют друг на друга до окончания), выгодно и правда делать в отдельных процессах или потоках. По окончании сессии, её результаты приводят к изменению в базе данных, что может повлиять на следующую сессию (подбор игроков, начальные условия и т.д.)

Но если есть какая-то хитрая механика, которая связывает сессии, то это может быть не вариант.

Также отдельной сессии можно добиться в ситуации, когда один из игроков является как бы сервером (хостом). В этом случае и отдельный сервер практически не нужен. Нужен только сервер для подбора игроков (matchmaking), а дальше сессию поддерживаю они сами.

При большом (огромном) количестве игроков одного сервера и вовсе не хватит. Тогда уже нужно думать о том, как раскидывать сессии по разным серверам. Таким образом, подбор сессии - один сервер, затем он посылает игрокам инфу, на каком сервере они будут играть, а также ключи, чтобы получить доступ к этому серверу, и далее они взаимодействуют уже с конкретным сервером. А рядом стоят другие сервера для сессий. Как-то так. В общем, очень похоже на ситуацию, когда хостит один из игроков, только используются официальные сервера от разработчика игры.

Самый сложный вариант - это, конечно же, ММО с открытым бесшовным миром. Там тысячи игроков в одном мире, но могут пересекаться со временем, хотя большую часть времени находятся далеко друг от друга и не соприкасаются. Там используются хитрые алгоритмы распределения по серверам. Но если все игроки соберутся в одной точке, то, скорее всего, всё поломается. Слава богу, что маловероятно, что все игроки условного игрового сервера (состоящего из многих физических) захотят собраться в одном месте.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
saboteur_kiev
@saboteur_kiev
software engineer
Является ли каждая игровая сессия, в которой сидит по 10 игроков, новым процессом на сервере? Или это реализовано как-то по другому?

По-разному.
Может быть отдельный процесс.
Может быть отдельный тред.
Может быть вообще один процесс на все.

Зависит от игры, от матча, от требований к быстродействию и синхронизацию.
Ответ написан
freeExec
@freeExec
Участник OpenStreetMap
Ну вот представь создаёшь процесс на 10 игроков и загружаешь им карту на 10Гб. Вопрос: сколько максимум игроков смогут играть на твоём сервере?
Или наоборот, вот у тебя играют 4999 игроков и 1 мамкинхакер. И вот он шлёт кривой запрос на сервак и он падает. Вопрос: сколько игроков остались без игры?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы