Как узнать разницу во времени между устройством и сервером?

Есть сервер и устройство на Android'е. Сервер сообщает устройству время окончания события в Unix Time и устройство отображает обратный отсчет в секундах (например, «1:32»). Проблема в том, что время на устройстве может сильно отставать или спешить плюс задержки сети. Соответственно, надо как-то синхронизировать. Вопрос — как?
  • Вопрос задан
  • 5279 просмотров
Решения вопроса 1
k12th
@k12th
console.log(`You're pulling my leg, right?`);
Еще учтите, что у пользователя может быть криво выставлен часовой пояс, и его GMT0 может отличаться от истинного:)

В общем-то, чтобы это решить, надо чтобы сервер присылал не только время окончания события, а еще и «сколько сейчас времени по мнению сервера на GMT0». Далее надо получить специфичное для клиента время по GMT0. Вычитаем одно из другого и сразу получаем поправку на и сетевые лаги и на неправильные часы в устройстве.
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
@nicolausYes
Есть протокол синхронизации времени NTP для сетей с переменными задержками, от него нужно отталкиваться и реализовать похожим образом. NTP использует алгоритм Марзулло, который учитывает время передачи.

На stackoverflow человек подробно описал как работает протокол, привел пример, думаю, это то, что вам нужно.

Также на просторах сети есть куски кода, реализующих NTP.
Есть opensource приложение под андроид для синхронизации телефона с NTP сервером.
Ответ написан
kwikpik
@kwikpik
Developer
Посылать на устройство не время окончания евента, а сколько ms осталось до его окончания. В таком случае погрешность будет только на время отправки-получения данных.
Ответ написан
jov
@jov
В моём приложение(мониторинг), я завёл отдельный тред, который раз в час, синхронизирует с сервером внутренние часы приложения, по ntp. Времени выставленному пользователем на системе не доверяю абсолютно.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы