Hужно ли дублировать вычисления на клиенте и сервере?

Делаем игру, сейчас вычисления, например, начался ли новый уровень, или прошелся ли квест делаются и на клиенте и на сервере.



Естественно, велик соблазн повесить все на клиент, но тогда: 1 — _очень легко взломать игру, 2 — данные могут неправильно обработаться (неспрашивайте как), 3 — куча мелких проблем с синхронизацией, сохранением и т.п.



Естественно, велик соблазн повесить все на сервер, но тогда: 1 — _очень много вычислений на сервере, по факту, они нам не нужны, 2 — время ожидания синхронизации увеличивается, 3 — приходится все-таки дублировать функционал на клиенте, без этого никак, 4 — куча мелких проблем с синхронизацией с клиентом.



Естественно, велик соблазн сказать, что мы объединим оба подходы, и получим нечто выдающееся, но… реальность вносит свои коррективы.



По факту, я работал и в компании, где придерживаются первого варианта (все на клиенте), и второго, но, что лучше, для себя самого пока не решил,



Есть ли у уважаемого сообщества какие-нибудь мысли в пользу первого или второго варианта.
  • Вопрос задан
  • 2807 просмотров
Пригласить эксперта
Ответы на вопрос 4
Fastto
@Fastto
Все на сервере и никак иначе. О каких проблемах синхронизации для этого варианта вы говорите, я просто себе не представляю, а вот синхронизация сервера и N взаимодействующих клиентов между собой — это АД.

А в целом опять же все упирается в конкретную задачу и степень доверия клиентским вычислениям, которые оцениваются персонально для каждой отдельной цели приложения — ведь сервер может выполнять только роль роутера или коммуникатора — т.е. клиенты стучат на сервер, сервер их между собой связывает и ждет результата вычислений от обоих(группы), если результаты совпадают — засчитывает результат, если имеет место потеря соединения, оставшийся клиент переключается на сервер и ждет его решения.
Ответ написан
NorthDakota
@NorthDakota
PHP програмист
Нужно решить что для вас важней.
Безопасность, или производительность.
Я лично за безопасность. НО! Самый оптимальный способ, это проводить вычисления на стороне клиента, и проверять входящие данные на сервере.
Например. Мы знаем, что пользователь не может заработать/выиграть за определённое время определённую сумму. При вхождении на сервер данных проверять это соотношение. если оно ложное (пользователь подменил данные) тогда не записывать ничего в базу. А пользователю предупреждение.

Так и с остальными параметрами…
Ответ написан
opium
@opium
Просто люблю качественно работать
Если пользователей много то на клиенте, если мало то на сервер.
Ответ написан
Stalker_RED
@Stalker_RED
А в чем смысл дублировать на сервере синглплеер игру? Какая така великая беда случится от того, что кто-то накрутит себе уровень? На худой конец можно отправлять на сервер информацию об убитых противниках, изменении денег, патронов, инвентаря, и иногда их контролировать (при сохранении, левелапе или смене локации например).
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы