Синхронизация часов по сети с максимальной точностью
Допустим, у нас есть сервер с тикающими часами (просто целочисленная переменная, которая содержит количество миллисекунд с начала эпохи и обновляется каждый раз, когда изменяется системное время).
Каждый клиент должен иметь возможность синхронизировать свои собственные часы (не системные часы! Просто абстрактный таймер, целочисленное значение, которое увеличивается со временем) с серверными.
Например, клиент может отправить запрос синхронизации, а сервер ответит своим текущим значением часов.
Проблема в том, что мы не можем точно знать, сколько времени займет отправка и получение данных. Мы знаем время, которое прошло с момента отправки запроса до получения данных, мы можем разделить эту разницу на 2 и добавить ее к значению, полученному от сервера, но оно не очень точное!
Существует ли общая концепция синхронизации часов между сервером и клиентом с минимальной разницей значений с обеих сторон после ее выполнения?
1 ответ
Я бы порекомендовал для этого использовать NTP (Network Time Protocol), это просто способ синхронизации часов во всей сети.
http://de.wikipedia.org/wiki/Network_Time_Protocol
Почти у каждой операционной системы (я управляю Linux, Solaris, BSD и Windows) есть клиенты и серверы для NTP. Протокол имеет встроенные возможности по устранению задержек в сети.