Как вы вычисляете временной интервал клиент/сервер?

Я разрабатываю программное обеспечение клиент/сервер и ищу лучший способ синхронизировать часы клиента с часами сервера.

Конечно, я не могу использовать NTP, потому что не хочу трогать системные часы. . Я просто пытаюсь вычислить временной интервал, чтобы добавить его к каждому дате и времени, полученному с сервера, чтобы преобразовать его в «местное время».

Что я знаю, так это то, что:

  • Я решаю проблемы с часовым поясом, используя время по Гринвичу.

  • Сервер отправляет свое текущее время клиенту при подключении, а клиент вычитает время сервера из своего времени, чтобы вычислить временной интервал.

Это прекрасно работает, когда задержка сети постоянна (читай "моя локальная сеть"...)

К сожалению, я хочу, чтобы мое программное обеспечение работало в Интернете и даже на мобильных клиентах, для которых я наблюдал вариации задержки до 1 минуты.

Для программного обеспечения, над которым я работаю, такое отставание недопустимо.

Какой была бы хорошая стратегия для вычисления временного интервала клиент/сервер?


Последнее: я могу отправлять сообщения в обоих направлениях (клиент на сервер и сервер на клиент)

Это, вероятно, не имеет значения, но технология, стоящая за этим, представляет собой клиент .net WCF, использующий httpbinding с некоторым опросом.


person Brann    schedule 02.03.2009    source источник


Ответы (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
person innaM    schedule 02.03.2009

Вы можете регулярно пинговать сервер, чтобы вычислить задержку. Я не думаю, что вы можете быть действительно близко через Интернет.

person Ikke    schedule 02.03.2009