Расчет времени для пользовательских задач с точностью до секунды

Я создаю веб-сайт, на котором мне нужно рассчитывать время задач пользователей, показывать им время по мере их прохождения и отслеживать, сколько времени им потребовалось, чтобы выполнить задача. Таймер должен быть с точностью до секунды, а вся задача должна занять максимум 3-4 часа.
Я также должен запретить пользователю подделывать время завершения (здесь нет денег, так что это не очень высокий риск, но есть некоторый риск).

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

РЕДАКТИРОВАТЬ:
Вот что происходит сейчас в формулировке алгоритма:

  1. Пользователь запускает задачу - сервер отправляет пользователю идентификатор задачи и записывает время начала в базу данных, таймер на стороне клиента инициализируется.
  2. Пользователь выполняет задачу, его таймер работает ...
  3. Пользователь завершает задачу, таймер останавливается, и ответ пользователя и идентификатор задачи отправляются на сервер.
  4. Сервер получает время начала (используя полученный идентификатор задачи) и вычисляет, сколько времени потребовалось пользователю для выполнения задачи.

Проблема - время, вычисленное сервером, и время, отображаемое на стороне клиента, отличаются.

Любое понимание будет очень признательно.

5
задан maerics 20 July 2011 в 23:33
поделиться