@gcj

Как реализовать таймер на стороне сервера?

Всем привет!
Суть скрипта: есть вопрос и поле с ответом, человек отвечает на вопросы, если правильно, то переходит к следующему.
Если пользователь тупит, то через каждые 5 минут ему дается подсказка.
Проблема: контингент юзверов достаточно прошаренный, поэтому не хочется реализовывать таймер на стороне клиента, т.к. можно легко получить эндпоинт по которому запрашивается подсказка и тем самым выполнить запрос, не дожидаясь 5 мин. Поэтому решено запускать таймер на стороне сервера (Node.js)
Вопрос: Подскажите как лучше всего организовать этот момент. Естественно, таймер должен запускаться отдельно для каждого юзера, есть мысль что-то с socket.io придумать. В общем, как бы вы сделали?

Заранее спасибо за любой ответ.
  • Вопрос задан
  • 76 просмотров
Пригласить эксперта
Ответы на вопрос 3
shmatuan
@shmatuan
Vue, Node, RoR
socket.io хороший вариант, но только по истечению 5ти минут, не каждую секунду
Как вариант ещё - хешировать на сервере начало таймера (или конец - смотря как сам таймер реализован) с солью, сохранять хеш на стороне фронта и время с солью на стороне сервера, по истечсению таймера на фронте отправлять на сервер запрос о подсказке с проверкой этого хеша
Ответ написан
VoidVolker
@VoidVolker
  1. Сохранить в БД время начала теста
  2. На клиенте запустить таймер
  3. По истечении таймера отправить запрос на сервер
  4. Сервер при получении запроса проверяет время начала теста и если заданное время прошло — отправляет ответ, иначе отказывает
Ответ написан
@Azperin
Дилетант
Если вопросы выплевываются также через сокет, то можно при подключении добавить этому сокету объект.
{
  questionNumber: 1,
  nextTipOn: Date.now() + 300000;
}

При получении вопроса на клиенте у него запускается таймер через setTimeout, который делает запрос для подсказки. Ну а на сервере уже просто будет даты сравнить.

Плюс у вас всегда будет статистика, кто и какой вопрос сейчас решает, что можно будет вывести на страницу.
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
Acme Crypto Corp Нижний Новгород
от 100 000 до 150 000 руб.
Cvety.kz Астана
от 70 000 до 120 000 руб.
22 марта 2019, в 06:30
10000 руб./за проект
22 марта 2019, в 03:12
20000 руб./за проект
22 марта 2019, в 00:24
10000 руб./за проект