Программирование игр, создание игрового движка, OpenGL, DirectX, физика, форум
GameDev.ru / Программирование / Форум / Дублируют ли логику на сервере и клиенте ради оптимизации нагрузки на сервер?

Дублируют ли логику на сервере и клиенте ради оптимизации нагрузки на сервер?

Поделиться
is.ivanПользовательwww28 дек. 201618:11#0
Есть огромный по моим меркам мир где гоняют с тысячу юнитов в погоне за предметами, которые генерируются десятками тысяч.
Начал сначала писать толстый сервер, но понял что это будет запредельная нагрузка десятки раз в секунду передавать данные о сотни предметов на минимально отведенном участке.

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

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

Правка: 28 дек. 2016 18:23

FemidkoПостоялецwww28 дек. 201618:34#1
1. Обычно, огромный мир делят на небольшие зоны. Способы деления могут быть разными. Клиент видит одну (несколько) таких зон и ему нужно передавать только предметы этой зоны.
2. Зная алгоритм, конечно, читеры получат преимущества перед другими игроками и игра станет неактуальной. Однако, если у кого-то возникнут желание и возможности его узнать, то, наверняка, игра очень актуальна и имеет достаточно пользователей. Т.е. она выстрелила и у Вас найдется время решить данную проблему. Например, алгоритм постоянно меняется на сервере и клиенты получают текущий алгоритм.

Правка: 28 дек. 2016 18:35

iCpuПостоялецwww29 дек. 201610:28#2
Да, бесполезно. Куда проще разбивать базу сервера на чанки, так что нагрузка на диск не будет бутылочным горлышком. С сетью ничего не поделать.

Что до темы:
1) Синхронизация. Точность времени при сетевой передаче явно меньше FPS и стремится к нескольким секундам, что очень даже не хорошо. Лечится переспрашиванием о существовании предметов.
2) Перевод времени. Как вы отреагируете на оной?

TelVoltПостоялецwww29 дек. 201620:23#3
Ну насколько я знаю, в RTS с сотнями юнитов на карте только так и поступают - вся карта полностью моделируется на каждом компе, весь рандом происходит по одному алгоритму, чтобы не требовалось его синхронизировать. Передаётся между клиентами через сервер только пользовательский ввод - команды юнитам. Ввод обычно передаётся по кадрам, например, каждые 100 миллисекунд сервер собирает с клиентов все их команды и одной пачкой рассылает им чужие.
Из недостатков, кроме сложности в написании кода (а там даже float лучше не использовать чтобы погрешность не накапливалась):
1. Вся карта на каждом клиенте - может быть слишком сложно вычислительно.
2. Вся карта на каждом клиенте - значит, возможен хак на открытие карты.
3. При лаге у одного клиента - или ставим на паузу всю игру для всех игроков, пока связь не восстановится, или отрубаем этого клиента насовсем. Потеря пакета команд для нас неприемлема, так как по эффекту бабочки сломает всю дальнейшую игру.
4. Ввод нового игрока в игру затруднён - надо полностью передать ему всё текущее состояние или всю историю команд. Для партии в RTS это не фатально, для MMO это важно.

/ Форум / Программирование игр / Сеть

2001—2017 © GameDev.ru — Разработка игр