Синхронизация времени на стороне клиента и сервера [дубликат]


На этот вопрос уже есть ответ здесь:

У меня есть веб-сервис, который собирает рыночные данные в реальном времени и отображает их в веб-интерфейсе.

Мой интерфейс (jQuery) должен отображать часы, несколько синхронизированные с часами сервера (+- несколько секунд прекрасно).

Я думал о доставке метки времени UTC вместе с остальными данными, которые сервер предоставляет При загрузке клиента.

Затем я бы запустил таймер и каждые 1 секунду увеличивал отображаемые часы.

Это хороший подход или лучше использовать сервер времени?

Спасибо!

1 2

1 ответ:

Необходимо учитывать задержки в сети. Данные с вашего сервера не будут поступать к вам мгновенно. Я предлагаю сделать это с помощью алгоритма Кристиана:

  1. клиент отмечает текущее время клиента (T1) и отправляет запрос на сервер.
  2. сервер отправляет клиенту время (T2).
  3. клиент получает ответ сервера и снова отмечает свое текущее время (T3).
  4. T3-T1-это общий запрос времени, необходимый для перехода на сервер и обратно (RTT). Теперь мы можем предположить, что переход от сервера к клиенту занимает примерно половину этого времени. Итак, ваше "правильное" время - T2 + (T3 - T1)/2

Подробнее об алгоритмах синхронизации часов читайте в Википедии