Дизайн игрового движка: многопользовательские и серверы прослушивания

Мой игровой движок сейчас состоит из рабочей части одиночного игрока. Теперь я начинаю думать о том, как сделать многопользовательскую часть.

Я выяснил, что во многих играх нет реального режима одиночной игры, но при игре в одиночку вы на самом деле размещаете и локальный сервер, и почти все работает так, как если бы вы были в многопользовательском режиме (за исключением того, что пакеты данных могут быть переданы по альтернативному маршруту для лучшей производительности)

Моему движку понадобится большой рефакторинг для адаптации к этой модели. Было бы три возможных режима: выделенный клиент, выделенный сервер и клиент-сервер (режим прослушивания)

  • Как часто используется модель сервера listen-server в игровой индустрии?
  • Каковы преимущества (dis)?
  • Какие еще параметры у меня есть?

Ответ 1

Я посмотрю, смогу ли я ответить на это как можно лучше:

Как часто используется модель сервера прослушивания в игровой индустрии?

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

Однако у вас есть несколько игр и сервисов, например, Left 4 Dead, League of Legends и некоторые игры XBox Live, которые используют несколько иной подход. Все они используют архитектуру клиент-сервер с управляющим сервером. Основная идея здесь заключается в том, что кто-то создает выделенный сервер, который не "запускает" какую-либо игру. Контролирующий сервер создаст "лобби", и когда игра начнется, контрольный сервер добавит их в очередь, и когда это будет поворот в лобби, он выберет соответствующий выделенный сервер (с точки зрения местоположения/скорость, доступность, множество факторов) и назначить игроков на этот сервер. Только тогда сервер фактически "запустит" игру. Это та же идея, но немного упрощенная, так как клиенту не нужно "выбирать" сервер, присоединяться к игре и позволять управляющему серверу выполнять работу.

Конечно, самой большой моделью клиент-сервер является модель MMO, где один или несколько серверов работают в постоянном мире, который обрабатывает практически все данные и логику. Некоторые из более известных игр, использующих эту модель, - World of Warcraft, Everquest, что-то в этом роде.

Итак, где находится сервер прослушивания здесь? Честно говоря, на самом деле это не так хорошо, однако вы все равно найдете много игр, используя его. Например, большинство исходных игр позволяют создавать серверы для прослушивания, и многие игры XBox Live (это было время, но я считаю, что Counter Strike сделал, так же как Quake 4 и многие другие). В целом, однако, они, похоже, не одобряются преимуществами модели клиент-сервер, что приводит нас к следующему пункту.

Каковы преимущества (dis)?

В первую очередь: производительность. В клиент-серверной модели клиент будет обрабатывать локальные изменения (такие как вход, графика, звуки и т.д.) В каждом цикле игры. В конце цикла он упакует релевантные данные (например, движется ли игрок? Если да, то где? Где он сейчас смотрит? Скорость? Они стреляли? Если да, информация о пуле. Etc) и отправить его на сервер для обработки. Сервер возьмет эти данные и определит, действительно ли каждая вещь, например, перемещение пользователя таким образом, что указывает на взлом (подробнее об этом позже), является ли движение действительным (что-нибудь в этом плане?), Сделал ли пуля у игрока 1 удар игрока 2? И многое другое. Затем сервер упаковывает этот пакет и отправляет его клиентам, которые затем обновляют все необходимое, например, корректируют здоровье, если игрок был снят, ногами игрока, если определено, что они взломают и т.д.

Сервер прослушивания, однако, должен иметь дело со всем этим в одно и то же время. Поскольку я предполагаю, что вы знакомы с программированием, вы, вероятно, понимаете, сколько энергии может играть игра с компьютера, особенно плохо разработанная. Добавляя к сетевой обработке, обработке безопасности и т.д., А также к клиентской игре, вы можете увидеть, какая производительность будет иметь серьезный удар, по крайней мере, насколько стандартная обработка идет. Кроме того, большинство серверов работают в быстрых сетях и являются серверами, предназначенными для защиты сетевого трафика. Если сеть сервера прослушивания работает медленно, вся игра будет страдать.

Вторая безопасность, как было сказано ранее, одна из основных задач, которые сделает сервер, это определить, использует ли игрок игру. Возможно, вы видели их как Punkbuster, VAC и т.д. Существует очень сложный набор правил, которые запускают эти программы, например, определяют разницу между хакером и очень хорошим игроком. Было бы очень плохо для вашей игры, если бы вы не смогли поймать хакеров, но еще хуже, если бы вы совершили иск против ложно обвиняемого.

Сервер прослушивания, как правило, не сможет обрабатывать клиентскую игру, обработку сервера и обнаружение взлома, и в большинстве случаев такие детекторы, как Punkbuster, очень трудно, если не невозможно, запустить на сервере прослушивания, потому что ему сложно нормально функционировать без необходимой вычислительной мощности, так как в общем случае игровая логика имеет приоритет над безопасностью, и если детектору не разрешено обрабатывать один кадр, он может потерять данные, необходимые для того, чтобы кого-то осудить.

Наконец, игровой процесс. Самое главное в серверах - это то, что они постоянны, а это означает, что даже если все уйдут, сервер продолжит работу. Это полезно, если у вас есть популярный сервер, который не имеет большой активности в ночное время, люди все еще могут присоединиться, когда они готовы к игре, и не нужно ждать, пока он будет возвращен в онлайн.

В слуховом сервере основным недостатком является то, что, как только клиент, у которого есть сервер для прослушивания, уходит, игра должна быть передана другому игроку (создавая в некоторых случаях lul в игре, которая может длиться минуты в некоторых случаях), или должен полностью закончиться. Это не предпочтительнее на большом сервере, так как хост должен либо оставаться в сети (тратить слот на сервере, и его/ее мощность компьютера, что также может замедлить игру), либо заканчивать игру для всех.

Однако, несмотря на эти проблемы, серверы прослушивания имеют несколько преимуществ.

Легко настроить. Большинство серверов прослушивания - это не что иное, как поражение "Новая игра" и возможность присоединиться к ним. Это легко для людей, которые просто хотят играть со своими друзьями, и не хотят пытаться найти пустой выделенный сервер или играть с другими людьми.

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

Меньше ресурсов. На большинстве выделенных серверов пользователь с одним и тем же IP-адресом не может подключиться к выделенному серверу (что означает, что клиент должен либо размещать сервер, либо играть, они не могут выполнять оба). Если клиент хочет играть на своем собственном сервере, им обычно потребуется вторая машина для размещения сервера или покупка или аренда выделенного сервера, чтобы они могли играть на нем. Для сервера прослушивания требуется только один компьютер, который может быть единственным, что может использовать клиент.

В обоих случаях оба имеют преимущества и недостатки, и вам нужно взвесить их тем, что вы готовы проектировать и внедрять. По моему опыту, я считаю, что если бы вы использовали сервер для прослушивания, он бы привык, если бы ничто иное, как несколько пользователей, желающих поиграть с друзьями или тестовые настройки.

Наконец:

Какие еще параметры у меня есть?

Это промышленная банка червей. В реальности любой тип сетевой архитектуры может быть применен к видеоиграм. Однако, из того, что я видел, как и большинство интернет-коммуникаций, большинство сводится к некоторой форме клиент-серверной модели.

Пожалуйста, дайте мне знать, если я не ответил на ваш вопрос, или если вам что-то нужно расширить, и я посмотрю, что я могу сделать.