Синхронизация часов по сети с максимальной точностью

Допустим, у нас есть сервер с тикающими часами (просто целочисленная переменная, которая содержит количество миллисекунд с начала эпохи и обновляется каждый раз, когда изменяется системное время).

Каждый клиент должен иметь возможность синхронизировать свои собственные часы (не системные часы! Просто абстрактный таймер, целочисленное значение, которое увеличивается со временем) с серверными.

Например, клиент может отправить запрос синхронизации, а сервер ответит своим текущим значением часов.

Проблема в том, что мы не можем точно знать, сколько времени займет отправка и получение данных. Мы знаем время, которое прошло с момента отправки запроса до получения данных, мы можем разделить эту разницу на 2 и добавить ее к значению, полученному от сервера, но оно не очень точное!

Существует ли общая концепция синхронизации часов между сервером и клиентом с минимальной разницей значений с обеих сторон после ее выполнения?

1 ответ

Я бы порекомендовал для этого использовать NTP (Network Time Protocol), это просто способ синхронизации часов во всей сети.

http://de.wikipedia.org/wiki/Network_Time_Protocol

Почти у каждой операционной системы (я управляю Linux, Solaris, BSD и Windows) есть клиенты и серверы для NTP. Протокол имеет встроенные возможности по устранению задержек в сети.

Другие вопросы по тегам