В настоящее время я работаю над однопользовательской игрой, ориентированной на физику, где я хотел бы, чтобы физика моделировалась на стороне сервера. Это потому, что в игре будут таблицы лидеров, постоянное развитие игроков, и так далее, и я хочу предотвратить любые виды мошенничества - в основном это чисто клиент-серверная архитектура, клиент «тупой» и отображает только то, что сервер хочет, чтобы вы отобразили.
Проблема, однако, в том, что в эту игру, скорее всего, будут играть одновременно сотни (а может и тысячи) людей. Это касается меня, так как это, скорее всего, убьет вычислительную мощность сервера, если мне придется выполнять и поддерживать сотни состояний одновременно.
У меня не было бы проблем с переносом всех физических симуляций на клиентскую сторону, но тогда мне действительно нужен был бы способ проверить, действителен ли результат клиентского моделирования. Тем не менее, я не могу понять, как.
Я думал о том, чтобы время от времени запускать симуляцию на стороне сервера, чтобы убедиться, что клиент все еще играет честно, но я действительно хочу, чтобы сервер работал как можно меньше.
Физика станет такой же сложной, как демонстрация GDC 2011 Гленна Фидлера , возможно, даже проще. Тем не менее, гораздо больше всегда сталкивающихся твердых тел будет в одной сцене, и все они будут видны одновременно.
Мне трудно получить ответ на этот конкретный случай, так как большинство ресурсов в Интернете - опять же, сайт Гленна Фидлерса - отличный - говорят о мелкомасштабной сетевой физике (например, FPS с 30 игроками, такими как Halo).
Будем очень благодарны за любые советы, веб-сайты, документы или тому подобное.
Резюме вопросов, на которые я хотел бы получить ответ:
- Насколько осуществима модель клиент-сервер? Правильно ли обоснована проблема с моими процессорами на сервере?
- Можно ли надежно проверить физическое моделирование, выполняемое клиентом на сервере? Если так, то как?
источник
Ответы:
Вы можете проверять на стороне клиента представления других пользователей и отправлять клиенту отчет на сервер, если представление выглядит недействительным.
Тогда вы можете принять меры (либо забанить мошенника, либо забанить того, кто подделал ложный отчет). Чтобы проверить, действительно ли это представление неверно или нет, вы можете использовать специальный клиент или что-то еще.
источник
Ваша игра однопользовательская, единственное «взаимодействие» с другими игроками - лидерборд. Вы можете создать экземпляр, чтобы проверить симуляцию на вашем сервере для каждой отправки, вам не нужны все приемы, чтобы убедиться, что физика одинакова для более чем 30 клиентов, поэтому я не думаю, что вам нужно больше ресурсов, чем вы уже с тех пор физика уже работает :).
Проверяя, что каждый результат будет немного излишним, вы можете отправить симуляцию, сжатую на сервер, всякий раз, когда кто-то отправляет счет в таблице лидеров, а затем проверять только верхние 5% баллов на вашем собственном сервере, или, возможно, даже верхние 1% или даже умнее только проверять новые рекорды и предполагать, что все не лучше, чем # 1, вероятно, имеют не обманутую симуляцию.
Я не знаю, если ваш симулятор похож, настроен и не взаимодействует (легко проверить) или игроки могут взаимодействовать с симом во время его работы, но обязательно сделайте вашу физику таким образом, чтобы различные плавающие точечные представления не запутывают вещи и делают действительный пробег выглядеть недействительным.
источник
Не делайте этого, я могу заверить вас, что симуляция физики исключительно на сервере - очень плохая идея. Основная проблема не в нагрузке на сервер, а в отзывчивости. Отзывчивость на клиенте будет невероятно плохой. Игрок нажмет кнопку, затем вам придется совершить поездку в оба конца на сервер, прежде чем вы получите результаты симуляции. В прошлом я делал различные варианты (в основном, просто нажатия кнопок), и результаты не очень приятные, и их следует делать исключительно для очень медленных игр, у которых есть шансы сойти с рук (и даже в тех случаях, когда это воспринимается). отсутствие отзывчивости является огромной проблемой).
Лучшая схема, которую я собирался попробовать в следующий раз, когда появится сценарий этого типа, состоит в том, чтобы выбрать игроков очень маленькое подмножество вашей базы игроков, затем вы смоделируете для них серверную часть на короткое время и сравниваете свои результаты с их, без их ведома. Если они сильно отклоняются (вам следует ожидать некоторой степени расхождения), то вы классифицируете их как потенциальных читеров и продолжаете моделировать их еще некоторое время, чтобы подтвердить. То, что вы получите, - это своего рода кривая того, насколько законный игрок расходится по сравнению с сервером, под влиянием условий сети и т. Д., И вы быстро увидите, что мошенники находятся за пределами этой кривой. Эта система имеет следующие преимущества:
источник
Как сказал Даниэль, главной проблемой здесь будут программы, которые выполняют действия для игрока; Никакой перекос физики в игре не потребовался бы, если бы игрок был роботизированной рукой с точностью, обычно разрешенной для нейрохирургии.
источник