Синхронизация времени на стороне клиента и сервера [дубликат]
На этот вопрос уже есть ответ здесь:
У меня есть веб-сервис, который собирает рыночные данные в реальном времени и отображает их в веб-интерфейсе.
Мой интерфейс (jQuery) должен отображать часы, несколько синхронизированные с часами сервера (+- несколько секунд прекрасно).
Я думал о доставке метки времени UTC вместе с остальными данными, которые сервер предоставляет При загрузке клиента.
Затем я бы запустил таймер и каждые 1 секунду увеличивал отображаемые часы.
Это хороший подход или лучше использовать сервер времени?
Спасибо!
1 ответ:
Необходимо учитывать задержки в сети. Данные с вашего сервера не будут поступать к вам мгновенно. Я предлагаю сделать это с помощью алгоритма Кристиана:
- клиент отмечает текущее время клиента (T1) и отправляет запрос на сервер.
- сервер отправляет клиенту время (T2).
- клиент получает ответ сервера и снова отмечает свое текущее время (T3).
- T3-T1-это общий запрос времени, необходимый для перехода на сервер и обратно (RTT). Теперь мы можем предположить, что переход от сервера к клиенту занимает примерно половину этого времени. Итак, ваше "правильное" время - T2 + (T3 - T1)/2
Подробнее об алгоритмах синхронизации часов читайте в Википедии