Я создаю игру на основе холста, которая имеет важный элемент синхронизации. По завершении игры время завершения пользователя должно быть отправлено на PHP / MySQL на сервере для сравнения с другими игроками.
Время на стороне сервера (т. Е. Время начала запроса на отправку времени запроса) похоже на то, что оно может ввести время загрузки, влияющее на фактическое время пользователя и, следовательно, неэффективное в этом случае.
У меня возникают проблемы с тем, чтобы определить способ гарантировать, что отправленное время является законным. Как я могу запретить кому-то использовать консоль и редактировать код на стороне клиента таким образом, чтобы отправить ложное время?
Любая помощь будет принята с благодарностью.
Вы не можете. Никогда не доверяйте клиенту . Каждый запрос на ваш сервер может быть подделан.
Ты не можешь. Просто.
Там часы могут работать медленно, они могут менять дату / время между началом и концом.
Я работал над проектом, где мы замедляли часы, чтобы наблюдать за поведением.
Поэтому НЕ доверяйте клиенту. Полагайтесь на свои часы. Это то, что вы контролируете.
(Подумайте об этом – вы спрашиваете незнакомца с улицы на время, их часы могут быть немного быстрыми или медленными. Моя небольшая скорость, поэтому я буду более уверен, чтобы быть вовремя, даже если я опаздываю!)
В начале игры выполните ping-сервер и сервер сохранит время своего сервера на сеанс или другой метод persistance. по завершении отправьте завершенное время на сервер. На сервере сравните разницу во времени между запросом времени начала и запросом времени окончания и временем, представленным в игре. Позвольте некоторым расхождениям во времени, но, как и bergi, говорят, что это большая работа и до сих пор не будет на 100%.
Диаграмма потока:
Game start -> send command to server. Server saves time: (2:53pm) Game end -> send players time to server (3mins). Server gets current time (2:56pm) Server compares start time (2:53pm) with current time (2:56pm) which is 3mins. IF the difference == 3mins +/- 30sec then assume time is valid.
Отрегулируйте детали в зависимости от того, насколько строго вы должны быть и какие допуски вы примете. – Помните, что клиент может даже не играть в игру … любой запрос может быть подделан. Надеюсь, это хорошая отправная точка.
Время на стороне сервера (т. Е. Время начала запроса на отправку времени запроса) похоже на то, что оно может ввести время загрузки, влияющее на фактическое время пользователя и, следовательно, неэффективное в этом случае.
Оно может. Добро пожаловать в захватывающий мир онлайн-игр. Здесь ваше серверное приложение должно быть более продвинутым, где вы можете изменить времена людей, чтобы сделать его более справедливым . Pings / traceroutes, должны быть выполнены, чтобы получить представление о латентности.
У меня возникают проблемы с тем, чтобы определить способ гарантировать, что отправленное время является законным. Как я могу запретить кому-то использовать консоль и редактировать код на стороне клиента таким образом, чтобы отправить ложное время?
Не совсем уверен, что если HTML5 имеет какие-либо улучшения в этой области – я не ожидаю, что это произойдет – но один из способов – использовать Flash или использовать приложение за пределами браузера, что, вероятно, победит вашу цель использования JavaScript в первом место.