|
|
|||||
Регистрация: Apr 2009
Сообщений: 409
|
Синхронизация времени
Здравствуйте, стоит задача иметь на клиенте всегда актуальное серверное время с минимальной погрешностью. для этого на клиент при инициализации передается время с сервера, и считается его дельта к клиентскому. Далее ,каждую секунду, время обновляется на актуальное:
В теории все должно работать правильно, и время на клиенте всегда должно отставать от серверного на пару секунд. Но на практике время иногда отстает больше чем на минуту, а у некоторых даже обгоняет серверное. Приходится каждую минуту сверяться (при учете пинга). Для меня это большая загадка, если учесть что все обращения ко времени идут после события TICK, и оно на клиенте не может постоянно плавать без перевода часов. Кто сталкивался с подобной проблемой, и есть ли какое-то объяснение и решение? |
|
|||||
Регистрация: Oct 2006
Сообщений: 2,281
|
флэшка в браузере или на девайсе?Если второе - таймер может засыпать.
Добавлено через 5 минут upd: чтоб не зависить от дат лучше использовать время со старта AVM |
|
|||||
Регистрация: Apr 2009
Сообщений: 409
|
В браузере, на случай засыпания по идее засыпает и диспетчер)
А разве getTime() работает не по тому же принципу, только за 0 берется запуск? это бы было слишком просто) |
|
|||||
Регистрация: Oct 2006
Сообщений: 2,281
|
в браузере вроде таймеры не должны засыпать.GetTimer привязан к системным часам и к таймерам отношения не имеет.
Естественно часы не останавлиаются никогда. Добавлено через 7 минут upd:хотя да что getTimer,что new Date().getTime()+delta должны давать одинаковые результаты. Еще вариант если используется что-то типа aws(amazon web services) и бэкенд крутится на нескольких инстансах.Серверное время на разных инстансах может отличаться на 2-3 минуты в любую сторону и не определишь на какой из инстансов придет запрос.Мы недавно на такую граблю наступили.Решили синхронизацией часов инстансов по хрону раз в сутки. PS:А зачем нужно на клиенте иметь точное серверное время? Добавлено через 13 минут Цитата:
Последний раз редактировалось undefined; 10.09.2016 в 19:56. |
|
|||||
Регистрация: Apr 2009
Сообщений: 409
|
Проверил, к сожалению с getTime результат тот же, время во время одной сессии скачет то в плюс то в минус на 3-10 секунд, единсвтенное теперь не реагирует на перевод часов, и его можно исключить как причину.
Цитата:
|
|
|||||
При запросе времени с сервера, сохраняете его время на момент запроса (getTimer).
Далее просто создаёте функцию, которая будет возвращать актуальное время: var serverTime:Number; var synchronizationDate:int; /// Время сервера должно передаваться в миллисекундах. function synchronize(time:Number):void { serverTime = time; synchronizationDate = getTimer(); } /// Возвращает текущее время сервера в миллисекундах. function getActualTime():Number{ return (getTimer() - synchronizationDate) + serverTime; }
__________________
Дети не должны знать о своих родителях |
|
|||||
Регистрация: Apr 2009
Сообщений: 409
|
так оно и работает, но проблема в том что скачет время на клиенте
|
|
|||||
Регистрация: Oct 2006
Сообщений: 2,281
|
так сделай постоянный запрос точного времени с сервера по таймеру и смотри в какой момент расхождение начинается.Или оно только в проде воспроизводится?
|
|
|||||
Регистрация: Apr 2009
Сообщений: 409
|
только у других, чек и так идет каждую минуту, так вот за нее время может и просесть на 10-20 сек, магия)
|
Часовой пояс GMT +4, время: 13:59. |
|
« Предыдущая тема | Следующая тема » |
|
|