Моделирование на стороне сервера с сотнями игроков

9

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

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

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

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

Физика станет такой же сложной, как демонстрация GDC 2011 Гленна Фидлера , возможно, даже проще. Тем не менее, гораздо больше всегда сталкивающихся твердых тел будет в одной сцене, и все они будут видны одновременно.

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

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

Резюме вопросов, на которые я хотел бы получить ответ:

  • Насколько осуществима модель клиент-сервер? Правильно ли обоснована проблема с моими процессорами на сервере?
  • Можно ли надежно проверить физическое моделирование, выполняемое клиентом на сервере? Если так, то как?
Леннард Фонтейн
источник
Я оставлю этот вопрос открытым немного дольше в надежде, что все больше людей отправят свои мысли. Спасибо всем, кто уже сделал это!
Леннард Фонтейн
Пока разные клиенты независимы, у вас не должно возникнуть проблем с горизонтальным масштабированием. Используйте что-то вроде EC2, выводите емкость онлайн по мере необходимости.
ipeet
1
В чем проблема, если кто-то обманывает в однопользовательской игре? Просто позвольте им, лучше отбросьте идею лидеров и сфокусируйтесь на создании веселой одиночной игры
Maik Semder
2
«Можно ли надежно проверить физическое моделирование, выполняемое клиентом на сервере?» Да, это можно проверить, но читая ваши комментарии ниже: Вы планируете выдавать RL-деньги на лучшие результаты, и это похоже на игру в дартс, то есть после того, как начальная физика броска вступит во владение. Проблема здесь не в том, чтобы подтвердить физику, это легко. Проблема в том, что у вас будут мошенники, которые позволяют компьютерной программе делать броски, чтобы дать им отличные результаты.
Даниэль Карлссон
Проверенная физика сервера в общем мире вполне возможна, DCUO является хорошим примером этого. Обратите внимание, что «сервер» на самом деле означает «кучу серверных блоков», в то время как вы, кажется, пишете в терминах «сервер», представляющий собой один блок, расположенный где-то. В настоящее время вы не можете симулировать тысячи независимых акторов в одном физическом пространстве, таким образом, отсутствие обсуждения об этом; вы можете распространить тысячи игроков на независимые острова симуляции, которые не взаимодействуют.
Патрик Хьюз

Ответы:

5

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

Тогда вы можете принять меры (либо забанить мошенника, либо забанить того, кто подделал ложный отчет). Чтобы проверить, действительно ли это представление неверно или нет, вы можете использовать специальный клиент или что-то еще.

о0' .
источник
3
Это на самом деле чертовски умно! Не подумал бы об этом, очевидно, по крайней мере 2 или 3 клиента должны были бы запустить симуляцию в случае, если клиент запускает кого-то другого, его симуляция обманывает - в этом случае сервер всегда может выполнить финальное моделирование, если все клиенты сообщают о чем-то странном ,
Леннард Фонтейн
1

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

Проверяя, что каждый результат будет немного излишним, вы можете отправить симуляцию, сжатую на сервер, всякий раз, когда кто-то отправляет счет в таблице лидеров, а затем проверять только верхние 5% баллов на вашем собственном сервере, или, возможно, даже верхние 1% или даже умнее только проверять новые рекорды и предполагать, что все не лучше, чем # 1, вероятно, имеют не обманутую симуляцию.

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

Рой Т.
источник
Я не хочу вдаваться в подробности самого игрового процесса, но вы можете сравнить мою игру с игрой в дартс: как только вы нацелились и сделали бросок, физика вступает во владение, и вы ничего не можете изменить в этом больше. Изменит ли это знание ваш ответ?
Леннард Фонтейн
Нет, это ничего не изменит :). Просто храните повторы на сервере и проверяйте только подозрительные (например, новые рекорды)
Рой Т.
1

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

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

  • автоматизированный
  • Вы не жертвуете отзывчивостью
  • Поскольку вы просто имитируете очень маленькое подмножество базы игроков, нагрузка будет управляемой и даже масштабируемой (возможно, вы выберете меньше игроков для симуляции, если нагрузка высокая)
  • Применимо к каждой игре, которую я могу придумать
Ylisar
источник
Итак, как и Рой, вы в основном говорите: сохраняйте это на стороне клиента, сохраняйте «повторы», когда клиенты отправляют счет, и проверяйте эти повторы только время от времени (не все из них, небольшой процент). Что если на основании оценки, которую клиент предоставит, выплата по кредиту выполнена, то есть в части развития игрока кредиты также можно купить за реальные деньги (!!!) - вы все еще рекомендуете этот подход? Если мошенничество дает чрезмерное количество кредитов, и я проверяю только время от времени, я бы в основном потерял деньги. Вы, вероятно, можете пометить человека, когда его оценка выше определенного порога, но будет ли лучший способ?
Леннард Фонтейн
Если физический движок является детерминированным (так и должно быть), и сервер имитирует, используя то же начальное состояние и входные данные, что и клиент (что должно быть выполнимым), тогда результаты должны быть в разумных пределах ошибки с плавающей запятой (незначительно). Даже если есть случайные эффекты, и невозможно пройти через состояние ГСЧ, вы можете пропустить случайные числа и использовать их для проверки (и даже проверить их распределение, в случае, если вымышленные случайные броски делают большую разницу в игровом процессе) ,
ipeet
Нужны только кредиты, вам лучше проверять каждый повтор, так как обман больше не для того, чтобы попасть в список рекордов, а для получения денег. Если вам нужны деньги, вам нужно гораздо больше безопасности, я не могу вам помочь.
Рой Т.
@RoyT. Я, вероятно, сделаю это в любом случае, даже если я не выплачиваю деньги, основанные на кредитах (кто-то неправильно прочитал это, я думаю?). Я намерен иметь политику нулевой терпимости, поэтому я просто пакетный файл воспроизведения для проверки. Если это действительно подозрительно, я принимаю меры.
Леннард Фонтейн
1

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

Какой-то парень
источник
Я мог бы быть немного неясным. Мои игры предоставят вам виртуальные кредиты после завершения игры. Вы можете использовать эти кредиты, чтобы разблокировать новый контент для игры. Вы также можете использовать реальные деньги для покупки кредитов, чтобы быстрее разблокировать контент (учтите, что это не Pay2Win, я ненавижу это). У меня нет намерений выплачивать реальные деньги на основе кредитов. Тем не менее, дартс был всего лишь метафорой, описывающей, какое влияние геймер оказывает на состояние твердых тел, я не боюсь «прицельных роботов», поскольку это даст вам преимущество.
Леннард Фонтейн