@avbrugen

Как сделать таймер обратного отсчета одинаковым на двух компьютерах?

Делаю проект и столкнулся с такой вот проблемой: таймер обратного отсчета (реализован с помощью setTimeout) показывает разное время на двух компьютерах. На втором компьютере время немного опаздывает и это объясняет разницу примерно в 30 секунд. Однако, заказчик кинул в пример вот этот сайт - https://ubiz.ua/lot/207098-maynovi-prava-chastka-u-ner/. Там счетчик обратного отсчета отображает одно и то же время на двух компьютерах. Как можно провернуть тоже самое? Или может кто подскажет свои варианты реализации. Спасибо.
  • Вопрос задан
  • 572 просмотра
Пригласить эксперта
Ответы на вопрос 3
saboteur_kiev
@saboteur_kiev
software engineer
Посмотреть как написано у вас, откуда берется время - локальное время компьютера клиента? Или вы получаете время с сервера, и от него отсчитываете?

По setTimeout делается ЧТО? просто каждые 1000 мс время уменьшается на 1 сек, или каждые 1000 мс идет новый запрос к серверу, чтобы узнать свежее время?

Если просто уменьшается, то разница будет накапливаться, ибо javascript может работать с разной скоростью.

Правильно будет по setTimeout запрашивать новое время с сервера.
Можно по setTimeout уменьшать на 1, а каждую 5-ю секунду запрашивать с сервера точное время. Тогда все клиенты будут получать одинаковое время и каждые 5 секунд поправлять, если кто-то уходит вперед/запаздывает.
Ответ написан
@kostya_vtomske
От наговорите сейчас. Каждые 1 - 3 -5 секунд отправлять запрос на сервер. Просто берите время для счетчика серверное и все будут счастливы, а если не дай бог у вас будет хайлоад, вы подвешаете железку такими 5 секундными запросами по всякой муйне.
Ответ написан
Комментировать
DIITHiTech
@DIITHiTech
Fullstack javascript developer
Синхронизировать только начальную метку времени, и работать с датой/временем на клиенте, setInterval не должен заниматься инкрементом или декрементом счетчика, это негарантированные интервалы- там только отрисовкой значения можно заниматься. Запрашивать опять метку времени с сервера не имеет смысла.
https://jsfiddle.net/DigitalBrain/ky2vao9s/
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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