Nara-auto.ru

Автосервис NARA
2 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Как определить сервер синхронизации времени

wiki.skylark.ru

Нашли ошибку в тексте?
Выделите и нажмите
Ctrl + Enter !

Содержание

Синхронизация времени

Так как эфирное воспроизведение работает с точностью до кадра, а внутренние часы серверов и клиентов имеют значительную погрешность хода, то им требуется регулярная синхронизация с единым внешним источником точного времени. Таким источником может являться локальный NTP (англ. Network Time Protocol — протокол сетевого времени) сервер, получающий штамп точного времени из сигнала GPS.

Схема синхронизации по NTP

Настройка NTP в Windows

Операционные системы семейства Windows содержат службу времени W32Time. Эта служба предназначена для синхронизации времени в пределах организации. W32Time отвечает за работу как клиентской, так и серверной части службы времени, причем один и тот же компьютер может быть одновременно и клиентом и сервером NTP.

По умолчанию служба времени в Windows сконфигурирована следующим образом:

Такая схема работает в большинстве случаев и не требует вмешательства. Однако структура сервиса времени в Windows может и не следовать доменной иерархии и надежным источником времени можно назначить любой компьютер.

В качестве примера приведем настройку NTP-сервера в Windows Server 2008 R2, по аналогии можно настроить NTP сервер и в Windows 7.

Запуск NTP сервера

Служба времени в Windows Server не имеет графического интерфейса и настраивается либо из командной строки, либо путем прямой правки системного реестра. Рассмотрим второй способ:

В редакторе «regedit» открываем ветку реестра: HKLMSystem CurrentControlSetservices W32TimeTimeProviders NtpServer .
Для включения NTP сервера параметру Enabled надо задать значение 1. Для применения изменений перезапустите службу времени командой net stop w32time && net start w32time .

После перезапуска службы NTP, сервер уже активен и может обслуживать клиентов. Убедиться в этом можно с помощью команды w32tm /query /configuration . Эта команда выводит полный список параметров службы. Если раздел NtpServer содержит строку Enabled:1, то все в порядке, сервер времени работает.

Для того, чтобы NTP-сервер мог обслуживать клиентов, в брандмауэре необходимо открыть UDP порт 123 для входящего и исходящего трафика.

Основные настройки NTP сервера и клиента

Значение по умолчанию для компьютера, входящего в домен — NT5DS, для отдельно стоящего компьютера — NTP.

Чтобы заявить рядовой сервер (не домен-контроллер) как надежный источник времени, нужен флаг 5 (1+4).

После изменения настроек необходимо обновить конфигурацию сервиса. Сделать это можно командой w32tm /config /update .

Список команд службы времени

Список команд для настройки, мониторинга и диагностики службы времени:

КомандаОписание
w32tm /monitorпри помощи этой опции можно узнать, насколько системное время данного компьютера отличается от времени на контроллере домена или других компьютерах. Например: w32tm /monitor /computers:time.nist.gov
w32tm /resyncпри помощи этой команды можно заставить компьютер синхронизироваться с используемым им сервером времени.
w32tm /stripchartпоказывает разницу во времени между текущим и удаленным компьютером. Команда w32tm /stripchart /computer:time.nist.gov /samples:5 /dataonly произведет 5 сравнений с указанным источником и выдаст результат в текстовом виде.
w32tm /configэто основная команда, используемая для настройки службы NTP. С ее помощью можно задать список используемых серверов времени, тип синхронизации и многое другое. Например, переопределить значения по умолчанию и настроить синхронизацию времени с внешним источником, можно командой w32tm /config /syncfromflags:manual /manualpeerlist:time.nist.gov /update
w32tm /queryпоказывает текущие настройки службы. Например команда w32tm /query /source покажет текущий источник времени, ээw32tm /query /configuration выведет все параметры службы.
net stop w32timeостанавливает службу времени, если запущена.
w32tm /unregisterудаляет службу времени с компьютера.
w32tm /registerрегистрирует службу времени на компьютере. При этом создается заново вся ветка параметров в реестре.
net start w32timeзапускает службу

Устранение неполадок

В Windows 7 — служба времени не запускается автоматически при старте Windows. Исправлено в SP1 для Windows 7.

Пользовательская настройка параметров Internet Time в Windows 10

Е сли в вашей Windows включена автоматическая синхронизация времени по интернету, можете быть уверены, что показывающие время в системном трее часики никогда не будут отставать или спешить, ну, разве что на самое малое, на каких-нибудь пару секунд. Основные настройки даты и времени в Windows 10 доступны в разделе приложение Параметры «Время и язык» -> «Дата и время», однако параметры Internet Time являются исключением.

Доступ к ним можно получить, перейдя в классическую панель управления и запустив апплет «Дата и время».

Дата и время

Чтобы настроить параметры синхронизации, переключитесь в открывшемся окошке на вкладку «Время по интернету» и нажмите кнопку «Изменить параметры»

Время по интернету

И выберите в выпадающем списке нужный сервер, а затем нажмите «Обновить сейчас».

Обновить сейчас

По умолчанию в Windows 10 используется time.windows.com , в качестве альтернативы предлагается time.nist.gov , но вы также можете подключиться к любому другому серверу точного времени, указав в поле его адрес и нажав «Обновить сейчас». Не забудьте только убедиться, что в чекбоксе «Синхронизировать с сервером времени в Интернете» установлена галочка .

Эту же настройку можно изменить через реестр. Открыв командой regedit редактор реестра, разверните в левой колонке эту ветку:

За выбор сервера синхронизации времени отвечает параметр по умолчанию, который может принимать строковые значения 1, 2, 3 и так далее. В свою очередь эти числа являются ничем иным, как именами параметров, имеющих в качестве значений URL -адреса серверов (смотрите скриншот) . Если вы хотите установить основным сервер, которого нет в списке имеющихся параметров, тут же создайте новый строковый параметр с именем порядкового номера, а в качестве его значения укажите ваш сервер.

Regedit

Regedit

Regedit

После этого дважды кликните по параметру по умолчанию и замените его значение именем или если хотите номером созданного параметра. Готово. Сохраните настройки, закройте редактор реестра и на всякий случай перезагрузите компьютер.

Публичный NTP сервер

Компания «Мобатайм Системс» предоставляет возможность воспользоваться своим сервером NTP для получения точного времени. Для настройки синхронизации различных операционных систем, Вы можете воспользоваться инструкциями, которые доступны по ссылкам ниже на этой странице.

Адрес сервера: ntp.mobatime.ru

ImageВ последнее время резко возросло количество случаев NTP-вандализма, направленных против публичного сервера Mobatime. Для обеспечения стабильной работы бесплатного сервиса предоставления точного времени мы вынуждены вводить ограничения в отношении тех IP-адресов, которые генерируют запросы к NTP-серверу с аномально высокой частотой.

Доступ к серверу по протоколу NTP (UDP порт 123) предоставляется бесплатно. Мы будем признательны, если Вы сможете разместить на корпоративном, личном сайте, на форуме наш баннер, кнопку или ссылку на сайт Mobatime Systems.

Мы тратим достаточно серьёзные временные и финансовые ресурсы на создание и поддержку работы сети NTP серверов. Если Вам по роду своей деятельности необходимо наличие точного времени, полученного с нескольких серверов, или непродолжительное отсутствие синхронизации критично для производственных процессов, то при помощи этой формы Вы можете зарегистрироваться. В дополнение к синхронизации времени по протоколу NTP с сервером ntp.mobatime.ru, регистрация бесплатно откроет следующие возможности:

  • Получение времени по протоколу NTP с резервных серверов по мере ввода их в работу
  • Получение точного времени со всех серверов по протоколу Time (TCP порт 37)
  • Получение точного времени со всех серверов по протоколу Daytime (TCP порт 13)
  • Получение уведомлений о смене адресов серверов или о проведении регламентных работ, во время которых они могут быть недоступны
  • Консультации по решению проблем, которые могут возникать при настройке синхронизации

Мы гарантируем, что Ваши данные, которые будут сообщены нам во время регистрации, не будут переданы третьим лицам. При заполнении полей формы регистрации, пожалуйста, укажите полные и достоверные сведения. Мы будем признательны, если Вы укажете в запросе Ваши фамилию, имя и отчество, контактный телефон, по которому мы сможем связаться с Вами в случае возникновения каких-либо серьёзных проблем в работе сети NTP серверов. Мы хотели бы знать сферу деятельности Вашей компании, её полное наименование. По Вашему желанию, мы можем разместить информацию о Вашей компании на сайте «Мобатайм Системс» в разделе «Наши клиенты». Для предоставления доступа к расширенным возможностям синхронизации, нам необходимо знать IP адреса серверов, которые будут получать точное время. Эти адреса будут внесены в разрешающее правило файрвола. Обращаем Ваше внимание на то, что запросы на регистрацию будут обрабатываться вручную, начиная с середины сентября, и мы оставляем за собой право отказать в регистрации или закрыть доступ без объяснения причин.

Mobatime Systems предоставляет доступ к публичному NTP серверу LTS (Little Time Server). LTS специально разработан для обслуживания больших локальных сетей: производительность сервера достаточна для обслуживания до 50-ти запросов в секунду; сервер конфигурируется по локальной сети (Telnet), широкий диапазон рабочих температур (-20…+60°С, при влажности 5…95%) и возможность подачи питания на сервер по витой паре (Power over Ethernet, IEEE 802.3af) позволяют монтировать сервер в любом помещении; поддержка протоколов NTP v.4, SNTP, TIME, DAYTIME даёт возможность получать время с сервера практически любому оборудованию; высочайшая точность хода (± 0,005 сек./сутки) обеспечивает точным временем локальные сети любого масштаба и территориальной удалённости. Достаточно низкая цена сервера в сумме с высокой производительностью и неприхотливостью делают его отличным выбором по критерию цена/производительность для обеспечения точным временем локальных сетей.

Настройка сервера Windows 2003 на синхронизацию времени с сервером NTP Mobatime

Вся настройка выполняется из командной строки. Последовательность действий следующая:

net time /setsntp:имя_ntp_сервера_mobatime — указали, что Windows будет синхронизироваться с этим сервером NTP

net stop w32time && net start w32time — перезапустили службу времени Windows

w32tm /resync — отправили команду для принудительной синхронизации на локальный компьютер

В ответ должны получить следующее:

Команда синхронизации отправлена на local computer…
Команда выполнена успешно.

Через некоторое время проверяем журнал событий системы. Если все настроено верно, то в журнале будет информационное сообщение от источника W32Time с кодом (ID) 35 и текстом Служба времени выполняет синхронизацию системного времени с источником времени имя_ntp_сервера_mobatime

Если возникли какие-то проблемы, то в журнал будет записана ошибка с кодом (ID) 29 от источника W32Time и текстом NTP-клиент поставщика времени настроен на получение времени из одного или нескольких источников, однако ни один из этих источников недоступен. Попытки подключения к источнику не будут выполняться в течение ХХ мин. NTP-клиент не имеет источника правильного времени. В таком случае, убедитесь, что файрвол не блокирует соединения с NTP-сервером по протоколу UDP порт 123. Проверьте, что имя NTP-сервера Mobatime указано верно. Для этого в командной строке выполните

net time /querysntp

В ответ будет выведено имя сервера NTP.

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

w32tm /stripchart /computer:имя_компьютера

На экран будет выводиться информация о дельте локального времени и времени на имя_компьютера до прерывания работы при помощи Ctrl+C.

Если Ваша сеть с доменами, то клиенты будут автоматически синхронизировать свои часы с контроллером домена. Если Вы не используете в сети доменов, то настраивать клиентов придётся вручную.

Настройка не входящей в домен Windows XP на синхронизацию времени с сервером NTP Mobatime

Настройка WindowsXP, не включённой в домен, выполняется из GUI. Для настройки синхронизации дважды щелкните по часам в трее. Откроется окно свойств даты и времени. Это же окно можно открыть из Пуск — Панель управления — Дата и время. Переключитесь на последнюю вкладку Время Интернета. Обратите внимание на то, что вкладка появится в окне только при подключении к интернету.

Пропишите имя NTP-сервера Mobatime в соответствующем поле и нажмите кнопку Обновить сейчас. Windows проверит доступность сервера NTP и проинформирует об успешной синхронизации времени.

Настройка FreeBSD на синхронизацию времени с сервером NTP Mobatime

Настройка выполняется под рутовой учётной записью.

Для однократной синхронизации можно воспользоваться

ntpdate сервер_NTP_mobatime

Для синхронизации при каждой загрузке FreeBSD пропишите в rc.conf следующее

ntpdate_enable=»YES»

ntpdate_flags=сервер_NTP_mobatime

Этот способ хорошо подходит для машин, которые достаточно часто перезагружаются. Более правильным видится настройка демона ntpd.

Создайте (если не существует) файл /etc/ntp.conf Включите в него следующую строку

server сервер_NTP_mobatime prefer

Аргумент prefer указывает на предпочтение этого сервера перед остальными, т.к. Мобатайм Системс предоставляет Вам доступ к Master Time Server — серверу NTP, а не к компьютеру с работающим демоном ntpd.

На следующем этапе настройки нужно прописать в rc.conf

ntpd_enable=»YES»

Теперь FreeBSD будет постоянно сверять свои часы с NTP сервером Mobatime.

Заметки IT Менеджера

Затем следует передать роль PDC Emulator на новый контроллер домена.

На «новом» PDC Emulator запустить

w32tm /config /manualpeerlist:PEERS /syncfromflags:manual /reliable:yes /update

где PEERS — сервера — источники точного времени, причем значение это или DNS имя, или IP адрес. Если источников больше одного, то между ними необходимо ввести пробел, а сам список должен быть в кавычках: «time.domain.com time1.domain.com».

Share this:

Понравилось это:

Похожее

22 комментария »

Спасиб. Очень помог.

комментарий от kaizer — 11.03.2010 @ 07:02 | Ответить

[…] с внешним источником. Я как-то уже делал инструкцию Настройка точного времени в домене Windows 2003 / 2008 / 2008 R2, правда тогда еще для 2003 сервера. Вчера потратил весь […]

Спасибо коллега. Очень помог.

комментарий от NoRLesT — 14.07.2010 @ 00:06 | Ответить

благодарствую. тоже помогло

комментарий от shwarz13 — 22.09.2010 @ 19:28 | Ответить

Спасибо, помогает!
Однако: Если ваш компьютер является контроллером домена то необходимо внести соответствующие изменения в Управление групповой политикой> Default Domain Controllers Policy > Конфигурация компьютера > Административные шаблоны > Cистема > Служба времени Windows > Поставщики времени

Если ваш локальный NTP-сервер работает в условиях рабочей группы, то gpedit.msc
Конфигурация компьютера > Административные шаблоны > Cистема > Служба времени Windows > Поставщики времени

В групповой политике (локальной или доменной) Конфиг. комп — Админ шаблоны — Система — Служба времени Windows — Поставщики времени, значение параметра Включить NTP-клиент Windows, установите «Не задано»
а то не работает нормально

«Эта утилита входит в комплект Support Tools для Windows 2003 Server. К сожалению, на Windows 2008 R2 она не работает.»

комментарий от Volodya — 22.07.2011 @ 18:38 | Ответить

комментарий от itpadla — 22.12.2015 @ 11:19 | Ответить

у меня в компании 2 Домена Windows Server 2003 Service Pack 2

на втором контролере хочу поправить время так как сервер спешит на 3 минуты
1. задал параметры в реестре HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesW32TimeParametersNtpServer
ntp.time.in.ua,0x1
2. HKLMSYSTEMCurrentControlSetServicesW32TimeConfigAnnounceFlags
тут должна быть 5

3. Перезапускаем сервис времени:
net stop w32time && net start w32time
4. Теперь перезапускаю синхронизацию:
w32tm /resync /rediscover

5. на этом этапе случилась беда… запускаю
w32tm /unregister

пишет Acces Denied

перезапуск Сервера не помог

запускаю службы служба Windows time пропала ….

комментарий от Stepan — 14.03.2018 @ 11:46 | Ответить

Мне сложно вам помочь, т.к. у меня уже нет ни одного сервера с Windows Server 2003. Вы пробовали сделать w32tm /register ?
Тогда когда писал пост, проверял все на себе

комментарий от itpadla — 14.03.2018 @ 11:51 | Ответить

да написало такую ошибку The following error occurred: Access is denied

комментарий от Stepan — 14.03.2018 @ 11:55 | Ответить

Вы пробовали перезагрузить, а потом ввести w32tm /unregister и снова w32tm /register?

комментарий от itpadla — 14.03.2018 @ 11:56 | Ответить

а что это такое PDC Emulator ?

комментарий от Stepan — 14.03.2018 @ 11:56 | Ответить

Это FSMO роль сервера в домене AD.

ДОМЕН ACTIVE DIRECTORY
Сервер с ролью PDC Emulator служит великой задаче обеспечения совместимости с предыдущими версиями Windows. Но не только, и, в последнее время, не столько. Для начала неплохо бы вспомнить, чем занимался PDC в Windows NT 4.0 и 3.51:

Обработка операции “смена пароля” для пользователей и компьютеров

Репликация обновлений на BDC (Backup Domain Controller)

Обозреватель сети (Domain Master Browser)

В смешанной среде, в которой встречаются клиенты Windows NT4.0, Windows 95 и Windows 98 (без установленного клиента Active Directory) и контроллеры домена pre-Windows2000, всем вышеперечисленным занимается как раз PDC Emulator. Только он и только для них.

Когда же все клиенты обновляются до Windows 2000 и выше (либо когда на Windows NT4/95/98 ставится клиент Active Directory), наступает счастье:
Клиенты меняют пароли при помощи первого попавшегося контроллера домена

Запросы на репликацию от BDC перестают отнимать время в силу полного своего отсутствия
Клиенты ищут сетевые ресурсы в AD, и не зависят более от обозревателя сети (эх, как всё хорошо в technet)
После перехода всей инфраструктуры на Windows 2000 и старше, контроллер домена с ролью PDC Emulator причиняет пользу так:
Пароль, измененный любым другим контроллером домена, отправляется на PDC Emulator высокоприоритетной репликацией
Если аутентификация на любом другом контроллере домена не была успешной с признаком “неверный пароль”, запрос повторяется на эмуляторе PDC. Понятно, что, в случае только что произошедшей смены пароля, уж этот-то запрос будет успешным
При успешной аутентификации учетной записи сразу после неудачной попытки, эмулятор PDC о ней уведомляется и сбрасывает счетчик неудачных попыток в ноль. Сущий позитив для пользователя, часто забывающего свой пароль
Здесь важно заметить, что, даже в случае недоступности эмулятора PDC, информация об изменении пароля всё равно расползется по домену. Да, возможны некоторые сложности, пока идет репликация, но, в принципе, ничего страшного.
WELL KNOWN SECURITY PRINCIPALS
В Active Directory есть такая замечательная штука, как Well Known Security Principals. Это всяческие Local Service, Network Service, Digest Authentication, и т.п. Несложно догадаться, что управление ими всеми (начиная с Windows 2003) осуществляется как раз контроллером домена с ролью PDC Emulator. Конкретно, эмулятор PDC после апгрейда (или переноса данной роли) на более новую версию Windows обновляет содержимое контейнера “CN=WellKnown Security Principals,CN=Configuration,DC=”. В этот же момент происходит создание недостающих well-known и built-in групп, а также обновление членства в них.
ADMINSDHOLDER
Следующая нужная фича – AdminSDHolder, владелец административных дескрипторов безопасности. AdminSDHolder защищает административные группы от изменений. Если дескриптор безопасности в какой-либо административной учетной записи не соответствует представлениям AdminSDHolder’а, этот дескриптор будет обновлен в соответствии с его (AdminSDHolder’а) понятиями. К примеру, если исключить well-known пользователя Administrator из группы BuiltinAdministrators, AdminSDHolder вернет его на место.
Да, AdminSDHolder, как понятно, выполняется именно на контроллере домена с ролью эмулятора PDC.
DNS
Только для PDC Emulator в DNS регистрируется SRV-запись вида _ldap._tcp.pdc._msdcs.DnsDomainName, она позволяет клиентам быстренько найти сервер эмуляции PDC.
DFS
Изменения, вносимые в пространство имен Distributed File System (DFS), вносятся на контроллере домена с ролью PDC Emulator. Корневые серверы DFS периодически запрашивают с эмулятора PDC обновленные метаданные, сохраняя их у себя в памяти. Очевидно, что недоступность эмулятора PDC влечет за собой неверную работу DFS.
ГРУППОВЫЕ ПОЛИТИКИ
Редактор групповых политик по умолчанию соединяется с сервером PDC Emulator, и изменения политик происходят на нем же. Если PDC Emulator недоступен, тогда редактор ГП не постесняется спросить у администратора, к какому контроллеру домена подключиться.
ВРЕМЯ
Да, по умолчанию именно сервер PDC Emulator является для клиентов сервером точного времени в домене. А эмулятор PDC корневого домена в лесу является по умолчанию сервером точного времени для эмуляторов PDC в дочерних доменах.

комментарий от itpadla — 14.03.2018 @ 12:00 | Ответить

В любом случае, я вам настоятельно не рекомендую в 2018 году использовать серверную ОС старше чем 2012R2 и держать домен на ней.

комментарий от itpadla — 14.03.2018 @ 12:02 | Ответить

перезагрузил второй контролер только что

потом запустил w32tm /unregister и снова w32tm /register : и на первой же команде Acces Denied

я бы с радостью поставил новый контроллер Windows Server 2012 но надо как то настроить я не знаю как )

комментарий от Stepan — 14.03.2018 @ 12:23 | Ответить

net stop w32time делаете перед w32tm /unregister?

комментарий от itpadla — 14.03.2018 @ 12:33 | Ответить

ок, такой вопрос

первый DC у меня Windows 2003 Service Pack 2

второй DC у меня Windows 2003 Service Pack 2 живет на Hyper-V вот и хочу с него начать upgrade ОС )

комментарий от Stepan — 14.03.2018 @ 12:24 | Ответить

Вам не нужно делать upgrade. Да и не выйдет
Вам нужно установить с нуля парочку Windows Server 2012R2, обновить, ввести в домен, повысить до контроллера домена, перенести на них все нужные системные сервисы (DNS, DHCP и т.д.) и FSMO, а затем корректно понизить уровень 2003 до обычных серверов, а затем и из домена вовсе. Убедиться, что все ок, повысить уровень домена и леса до 2012R2. Как-то так.

комментарий от itpadla — 14.03.2018 @ 12:37 | Ответить

я хотел сказать установить новый Win 2012 (обновить с 2003 до 2008 R2 даже не получится это я понимаю )
так вот по процедуре…
1. установить новый сервер win 2012
2. добавить в домен
2.повысить его до уровня AD slave ( master у меня остается Win 2003 (пока) это как сделать ??

комментарий от Stepan — 14.03.2018 @ 12:47

Windows Server 2012R2. R2 — важно, просто 2012 тоже уже «старенький». Ну или сразу 2016 ставить.

У AD нет уровня slave, как и у контроллеров домена. Вам нужно почитать побольше по AD, а еще лучше послушать курсы от MS по этому поводу.

Лучший способ синхронизации клиентских часов javascript с датой сервера

У меня есть задача показать цифровые часы (с точностью до минут) на HTML — странице в некотором фиксированном часовом поясе (MSK или MSD-в зависимости от текущей даты). Я бы не хотел полагаться на клиентские системные часы, поэтому требуется некоторая синхронизация с сервером. HTTP-сервер отправляет заголовок даты в каждом ответе, чтобы мы могли отправить запрос AJAX GET или HEAD на любой URL-адрес нашего сайта, чтобы получить дату сервера, вычислить разницу с датой клиента и использовать ее при обновлении часов с помощью setTimeout(). Есть и другие вопросы остается: переключение часового пояса для дневных настроек, задержка учета очень медленных соединений.

есть идеи для этой задачи самым простым способом? Я бы предпочел решить без программирования на стороне сервера.

7 ответов

вы должны помнить время клиента между readyState==2 и readyState==3, Если вы собираетесь использовать ajax, потому что время сервера будет установлено где-то между временем по запросу и полученным ответом

эти две функции Javascript должны сделать трюк для вас.

EDIT: удалил «.заменять.(^/() [sS]/,»$1″)».

calcOffset () вычисляет смещение от времени сервера и компенсирует GMT/UTC.

getServerTime (), чтобы получить смещение локального времени в соответствии с серверами, используя локальный часовой пояс.

Если calcOffset () занимает много времени для выполнения, вы можете потерять точность в несколько секунд. Может время исполнения может быть учтено.

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

пример работает только в IE из-за » Msxml2.Для xmlhttp» я думать.

вы можете рассчитать точное время с NTP (протокол сетевого времени) в ваш код,

Я пытаюсь объяснить тебе:

  1. у нас есть ClientTime на отправку запроса (например, 4/3/2012 13:56:10.123)
  2. вы отправляете ClientTime на сервер
  3. у нас есть времени для запроса, я назвал его RequestTime (например: это занимает 5 секунд)
  4. в сервере, мы вычисляем Разница во времени между сервером и клиентом (например: IT ServerTime-ClientTime = ServerClientDifferenceTimeWithRequesttime), теперь вы должны эта разница, включая время запроса туда и обратно в шаге 3, то вы должны удалить время туда и обратно из разницы
  5. сервер отправляет ответ, который включает ServerClientDifferenceTimeWithRequesttime и ServerTime
  6. у нас есть времени для ответа я назвал его ResponseTime (например: Это занимает 3 секунды)
  7. в клиенте мы снова вычисляем время разницы между сервером и клиентом (например: IT ServerTime — ClientTime = ServerClientDifferenceTimeWithResponsetime), снова: теперь вы должны эта разница, включая время ответа туда и обратно в шаге 6
  8. мы имеем теперь время в клиенте
  9. вы должны рассчитать простые уравнения в клиент:

X (SyncedTime) = Now + (ServerClientDifferenceTimeWithRequestTime — RquestTime)

X (SyncedTime) = Now + (ServerClientDifferenceTimeWithResponseTime — ResponseTime)

Now — ClientTime = RquestTime + ResponseTime =>

Now — (ServerClientDiffRq — RquestTime) = Now — (ServerClientDiffRs — ResponseTime)

если вы решите это, вы нашли это:

ResponseTime = (ServerClientDifferenceTimeWithRequestTime — Now + ClientTime + — ServerClientDifferenceTimeWithResponseTime )/2

и затем вы можете найти синхронизированное время или время сервера в клиенте с этим уравнением:

X (SyncedTime) = Now + (ServerClientDifferenceTimeWithResponseTime — ResponseTime)

Я показываю простой код, но когда вы хотите написать его, не забудьте использовать дату и время UTC функции.

серверная сторона (например, php, c#):

PHP:

C#:

клиентская сторона (Javascript с в jQuery):

я обнаружил, что алгоритм @mehdi-yeganeh выше не дал мне полезных результатов, но идея звучит: использовать алгоритм NTP (или, по крайней мере, его слабую версию) для синхронизации серверных и клиентских часов.

Это моя окончательная реализация, она использует заголовки ответов сервера, если они доступны для дополнительной точности (пожалуйста, поправьте меня, если я ошибаюсь, мои собственные тесты говорят, что это довольно точно).

на стороне браузера (javascript):

на стороне сервера (PHP, но может быть что угодно):

ваш сервер на маршруте «GET / ntp» должен вернуть что-то вроде:

Если у вас есть PHP >5.4, вы можете сохранить вызов microtime () и сделать его немного более точным с помощью:

Примечание

этот способ можно рассматривать как своего рода гетто, есть некоторые другие ответы переполнения стека, которые могут привести вас к лучшему решению:

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

помогло бы, если бы мы лучше понимали, что вы на самом деле пытаетесь сделать.

Если вы просто хотите, чтобы часы отображали время на сервере, которое затем настраивается на определенный часовой пояс, сделайте это на стороне клиента с офсетами. Обработайте DST в часовых поясах, которые он применим, используя дату, которую вы получаете от сервера. Если вы хотите определить задержку, вам, вероятно, понадобится небольшой скрипт на сервере для вычисления разницы. Но, как и выше, это поможет лучше понять проблему. Если точность до минуты, задержка кажется менее важным.

спасибо @Mehdi Yeganeh и @Fedearne. Я реализую свою функцию, чтобы использовать как логику, так и работу.

Я бы синхронизировал время во время инициализации с сервером времени Интернета.

голоса
Рейтинг статьи
Читайте так же:
Регулировка фар как часто делать
Ссылка на основную публикацию
Adblock
detector