@Mihail_Mel

Как сделать таймер завязанный на БД?

Здравствуйте!
Подскажите как правильно организовать таймер с завязкой на Базу данных?
Суть задания - тестирование студентов. перед тестированием предоставление информации на время отведенное преподавателем (собственно оно и хранится в БД)
что сделал я:
1. Получил от сервера время
2. в скрипте получил new Date()
3. нашел разницу и соответственно запустил отсчет обратного времени с показом его пользователю через setInterval = 1000 милисекунд

Но вот вопрос. при обновлении страницы, естественно обратный отсчет начинается сначала )).
т.е. по-хорошему я каждую секунду должен обновлять время на сервере...
правильно ли так делать? или может быть есть другой способ организации таймера в связке с БД?
просто я понимаю, что если будет 10 учеников - то фигня сервер справится... а если 100?
как вообще такие вещи реализуют в системах дистанционного обучения?
  • Вопрос задан
  • 207 просмотров
Пригласить эксперта
Ответы на вопрос 2
petyagrill
@petyagrill
Как вариант можно использовать navigator.sendBeacon() в связке с window unload для обновления данных таймера в БД при закрытии или обновлении страницы

window.addEventListener("unload", logData, false);

function logData() {
  navigator.sendBeacon("/log", analyticsData);
}


подробнее
Ответ написан
RiseOfDeath
@RiseOfDeath
Диванный эксперт.
Насколько я вас понял - вам нужно на стороне клиента считать время "от начала тестирования" (или "до конца тестирования", что почти одно и тоже). С моей точки зрения стоит в базе хранить только время начала/окончания тестирования для конкретного студента.

Сооветственнно делаете в базе данных таблицу со столбцами "ID студента" (ключевое поле), "Время начала теста" (или "время окончания теста", мне даже кажется что последнее лучше). Соотвтественно вы при открытии страницы как-то определяете кто у вас там тестируется (авторизацию в общем делаете. В простейшем случае, если не хотите авторизацию - доавте столбец "Код для доступа", который генерируете рандомно при добавлении новой строки в таблицу, этот код даете студенту для авторизации. Но если вы пишете что-то не наколенное. то все-таки делайте нормальную авторизацию). Затем смотрите - если такого студента не записанно - добавляете запись; Если есть - вы точно знаете когда ему надо закончить.

p.s.
Ну я думаю очевидно что я сильно все упростил. В реальности там, вероятно, вам захочвется в базу писать больше разной информации, но это вы уже и сами сообразите.

p.p.s.
Ну и не забывайте про куки - если студент нажмет "обновить страницу", то в идеале он должен увидеть все тоже самое (а не заново окно логина). Тут уж, извините, не дам пояснений т.к. к вебу отношения не имею, и про куки знаю только то, что они существуют. В общем рекомендую для гугления что-нибудь "про хранение сессии на стороне сервера" и "про куки".
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы