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

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

Конечно, я не могу использовать 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

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

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