Я создаю веб-сайт, на котором мне нужно рассчитывать время задач пользователей, показывать им время по мере их прохождения и отслеживать, сколько времени им потребовалось, чтобы выполнить задача. Таймер должен быть с точностью до секунды, а вся задача должна занять максимум 3-4 часа.
Я также должен запретить пользователю подделывать время завершения (здесь нет денег, так что это не очень высокий риск, но есть некоторый риск).
В настоящее время я использую временную метку, чтобы отслеживать, когда пользователь начал, и в то же время инициализирую таймер на основе JS, когда пользователь заканчивает, я получаю уведомление и вычисляю разницу между текущим временем и начальной отметкой времени - этот подход бесполезен, разница в несколько секунд между таймером пользователя и моя разница во времени (то есть время, которое я рассчитал, потребовалось пользователем для выполнения задачи, примечание: это было проверено только в моем окружении разработчика, так как у меня еще нет другого окружения ..).
Я рассмотрел два других подхода:
1. Полностью полагаясь на таймер на стороне клиента (т.е. JS), и когда пользователь завершает задачу - отправляя время, которое ему потребовалось, зашифрованным ( таким образом пользователь не может подделать время начала ). Это не кажется очень практичным, поскольку я не могу придумать способ сгенерировать секретный ключ на стороне клиента, который действительно будет «секретным».
2. Полностью полагаться на таймер на стороне сервера и отправлять «тики» каждую секунду. Это похоже на много работы на стороне сервера по сравнению с двумя другими методами (машина, а не человек ... например, доступ к БД для каждого "тика", чтобы получить время запуска), и я также не уверен это будет совершенно точно.
РЕДАКТИРОВАТЬ:
Вот что происходит сейчас в формулировке алгоритма:
Проблема - время, вычисленное сервером, и время, отображаемое на стороне клиента, отличаются.
Любое понимание будет очень признательно.