Как вы вычисляете временной интервал клиент / сервер?
Я разрабатываю клиент-серверное программное обеспечение и ищу наилучший способ синхронизации моих клиентских часов с серверными часами.
Конечно, я не могу использовать NTP, потому что я не хочу трогать системные часы. Я просто пытаюсь вычислить интервал времени, чтобы я мог добавить его к каждой дате, полученной от сервера, чтобы преобразовать его в "местное время"
Что я знаю, так это то, что:
Я решаю проблемы TimeZone, используя время по Гринвичу
Сервер отправляет свое текущее время Клиенту при подключении, и Клиент вычитает время сервера из своего времени для вычисления промежутка времени.
Это прекрасно работает, когда сетевая задержка постоянна (читай "моя локальная сеть"...)
К сожалению, я хочу, чтобы мое программное обеспечение работало в Интернете и даже на мобильных клиентах, для которых я наблюдал вариации задержки до 1 минуты.
Для программного обеспечения, над которым я работаю, такое отставание неприемлемо.
Что было бы хорошей стратегией для вычисления промежутка времени клиент / сервер?
И последнее: я могу отправлять сообщения обоими способами (клиент на сервер и сервер на клиент)
Это, вероятно, не имеет значения, но технология, стоящая за этим, - это клиент.net WCF, использующий httpbinding с некоторым опросом.
2 ответа
Почему вы не можете использовать NTP? Конечно, по умолчанию для ntp устанавливается системное время, но это не обязательно:
$ ntpdate -q ntp.ubuntu.com
server 91.189.94.4, stratum 2, offset -0.102597, delay 0.05426
2 Mar 11:44:36 ntpdate[12239]: adjust time server 91.189.94.4 offset -0.102597 sec
Вы можете проверять сервер на регулярной основе, чтобы вычислить задержку. Я не думаю, что вы можете быть действительно близко через Интернет.