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


10

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

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

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

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

4
Первый вопрос довольно неактуален. Почему это должно иметь значение, как индустрия это делает? Они делают все не лучшим образом.
Коммунистическая утка

Ответы:


11

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

И, наконец:

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

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

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


«На большинстве выделенных серверов пользователь с одинаковым IP-адресом не может подключиться к выделенному серверу (это означает, что клиент должен либо размещать сервер, либо проигрывать, они не могут делать оба)». WAT? Куда? Почему? Если некоторые серверы имеют это явно бессмысленное произвольное ограничение, это не значит, что он будет вынужден сделать то же самое, когда он напишет один ...
o0 '.

Это артефакт старых игр, когда компьютеры не могли одновременно обрабатывать серверные алгоритмы, графические вычисления и игровую логику. Многие модели выделенных серверов препятствуют успешному подключению клиента, который пытался подключиться с той же машины, и эта практика все еще применяется в некоторых играх сегодня. Я никогда не говорил, что это относится ко всем моделям, и при этом я не говорил, что он должен был моделировать его в соответствии с этой конкретной парадигмой. Однако, технически, разрешение подключений к одному хосту отрицательно сказывается на назначении выделенного сервера, и единственным преимуществом является сохранение активности сервера после отключения.
shmeeps
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.