Как синхронизировать отсчет времени JavaScript с временем сервера дубликаты
Как синхронизировать отсчет времени JavaScript с временем сервера [дубликаты]
Я создаю сайт, который имеет время и цены, которые тикают. То, что меня больше всего волнует, — это синхронизировать время, чтобы оно было максимально точным для всех клиентов.
В настоящее время я отправляю клиенту количество оставшихся миллисекунд, которое затем используется для подачи таймера обратного отсчета, но из-за задержки передачи и визуализации это может быть отключено на несколько секунд даже при использовании двух браузеров на одном компьютере.
Есть ли способ синхронизировать время javascript клиента и время сервера, или мне просто придется иметь дело с этим небольшим отставанием?
Если бы только был способ точно измерить разницу во времени между сервером, отправляющим данные, и он был получен и отображен клиентом.
4 ответа
Несмотря на то, что время на сервере и клиенте будет отличаться, скорость изменения времени должна быть одинаковой. Я отправил оставшееся время на клиент, дайте клиенту добавить это время к текущему времени, а затем попросит клиента вычислить обратный отсчет от этого. Например:
Существует способ синхронизации данных времени javascript клиента и времени сервера. Я написал библиотеку, которая делает именно это: ServerDate.
Здесь часть README:
Вы можете использовать ServerDate , поскольку вы использовали бы функцию Date или одну из ее экземпляры, например:
Существует также новый метод получения точности оценки ServerDate для (в миллисекундах):
Вы можете видеть разницу между часами сервера и часами браузеров в миллисекундах:
Вы можете измерить время, в течение которого весь серверный раунд перемещается, и делить на два, чтобы получить хорошую оценку разницы во времени. Будьте осторожны: это не гарантирует, что IP-пакеты используют один и тот же маршрут в обоих направлениях, но проницаемость довольно высока.
Вы можете использовать Date.getTime() , если для вас достаточно разрешения на миллисекунды.
Решением этого является Javascript — он может получить доступ к настройкам часовых поясов на клиенте. К сожалению, он может получить только смещения часовых поясов (указанные в минутах) для определенных дат, без названия часового пояса. Чтобы точно определить часовой пояс, нам также нужно знать, используется ли летнее время (DST) — это часть клиентской части решения:
Вы сохраняете результаты как файлы cookie, к которым можно получить доступ через PHP script. Вы должны включить приведенный выше код, по крайней мере, на первую страницу, к которой пользователь обращается — я включаю его на каждой странице для распознавания (и адаптации) изменений, даже если такие изменения во время сеанса маловероятны.
В PHP вы можете извлечь действительный часовой пояс с помощью новой функции с именем timezone_name_from_abbr, доступной с PHP 5.1.3, либо она принимает аббревиатуру часового пояса или комбинацию смещения часового пояса (в секундах) и летнее время, и мы имеем последнюю комбинацию:
Это даст вам правильное имя часового пояса для пользователя, если данные в файлах cookie действительны — обратите внимание, что существует много «дублированных» имен, например «Европа/Берлин» и «Европа/Цюрих», которые имеют точно такие же настройки часового пояса (по крайней мере на данный момент), и вы можете получить либо один из них для соответствующих значений смещения и DST. Список имен часовых поясов можно найти в списке поддерживаемых часовых поясов на php.net.
Создание строк даты с заданным часовым поясом С именем пользовательского часового пояса теперь вы можете использовать классы PHP DateTimeZone и DateTime, чтобы, наконец, создать строки даты с правильным часовым поясом:
Программно-техническое средство «Сервер единого времени»
НПФ «КРУГ» разработала ПТС «Сервер единого времени», являющееся сервером единого точного времени информационной системы. Основными функциями ПТС «Сервер единого времени» являются:
- привязка системного времени абонентов к источнику точного времени;
- синхронизация времени всех абонентов, входящих в состав системы;
- автоматическая подстройка хода системных часов по источнику времени;
- протоколирование работы ПТС;
- настройка ПТС.
- аппаратная платформа;
- программное обеспечение;
- источник точного времени UTC (Universal Time Corrected – универсальное мировое время по Гринвичу);
- руководство по эксплуатации.
Рис. 1. Структурная схема ПТС «Сервер единого времени» вместе с подключёнными абонентами
Аппаратная платформа «Сервера единого времени» представляет собой малогабаритный одноплатный PC-совместимый компьютер промышленного исполнения, подключенный к источнику точного времени. Источником точного времени UTC является GPS-приёмник. Сигналы точного времени передаются Глобальной Системой Позиционирования GPS (Global Positioning System). В её состав входят 24 спутника и четверо высокоточных атомных часов. Спутники GPS равномерно распределены по орбите вокруг Земли. Это позволяет в любое время иметь несколько доступных спутников.
Программное обеспечение ПТС «Сервер единого времени» использует NTP-сервер, обеспечивающий синхронизацию времени на абонентах. Передача пакетов точного времени от сервера единого времени к абонентам осуществляется по сетевому протоколу времени NTP (Network Time Protocol). NTP позволяет передавать метки времени с точностью 232 пикосекунды. Он поддерживает самонастраиваемую иерархическую архитектуру сети и обеспечивает поддержку множества резервных серверов и путей передачи. Стандартной возможностью протокола NTP является возможность проведения криптографической аутентификации индивидуальных серверов с помощью симметричного и несимметричного шифрования, при котором клиенты проверяют подлинность серверов синхронизации времени, используя разделяемые секретные ключи.
Для взаимодействия абонентов с сервером времени на них устанавливаются и настраиваются службы точного времени. Служба точного времени, как правило, входит в состав операционной системы. Поддерживаемые операционные системы: Windows 2000/XP, Linux и QNX. Служба точного времени, кроме коррекций времени, осуществляет подстройку хода системных часов компьютера, что позволяет сохранить точное время в течение продолжительного периода в случае сбоя работы сети.
Системные характеристики аппаратной платформы:
- платформа на базе процессора с тактовой частотой от 133 МГц;
- объём дискового (или FLASH-память) пространства 32 Мб;
- системное ОЗУ 32 Мб;
- последовательный интерфейс COM1 (RS232, UART16550);
- интерфейс Ethernet IEEE 802.3 10/100 BASE-T, 10/100 Мбит/с;
- диапазон рабочих температур: от 0 о до + 60 о С;
- операционная система Linux;
- HTTP сервер Apache.
ПТС «Сервер единого времени» поддерживает работу в двух режимах:
- «широковещательный» режим;
- режим «клиент-сервер».
Режим «клиент-сервер». В режиме «клиент-сервер» абоненты периодически отправляют запросы серверу времени на получение точного времени. Получив запрос, сервер времени сразу же отправляет запросившему абоненту ответ, содержащий метку времени. Данный режим позволяет синхронизировать время на абонентах с гораздо меньшей погрешностью. Уменьшение погрешности достигается за счёт того, что абонент, зная время отправки запроса и получения ответа, может рассчитать и учесть при синхронизации величину задержки. Но при его использовании существует ограничение количества абонентов, зависящее от производительности аппаратной платформы и пропускной способности сети. Одна аппаратная платформа в режиме «клиент-сервер» может обеспечить синхронизацию времени примерно на 250 абонентах.
По требованиям РД 153-34.1-35.127-2002 погрешность привязки системного времени ПТК в составе АСУ ТП общестанционного уровня управления к астрономическому времени должна быть не более 0.5 с, расхождение между показаниями таймеров одного ПТК не должно превышать 5 мс.
Что касается «Сервера единого времени»:
Погрешность синхронизации системных часов абонентов относительно таймера источника времени в «широковещательном» режиме составляет не более 10 миллисекунд, в режиме «клиент-сервер», как правило, — не более 5 мс. Погрешность синхронизации системного таймера сервера времени непосредственно со временем UTC становится не более 500 микросекунд через 30 минут после его включения при доступности спутников GPS.
Таким образом, в режиме «клиент-сервер» «Сервер единого времени» полностью удовлетворяет требованиям РД.
Рассмотрим основные варианты использования «Сервера единого времени».
- Один сервер времени без резервирования. В данном случае один сервер времени осуществляет синхронизацию времени на всех настроенных абонентах сети (рис. 2).
Рис. 1. Структурная схема ПТС «Сервер единого времени» вместе с подключёнными абонентами
Рис. 3. Схема использования «Сервера единого времени» при 100% резервировании
Рис. 4. Схема использования сервера времени 2-го уровня
При использовании «Сервера единого времени» перевод времени при переходах «зима/лето» осуществляется ОС в соответствии с настройками текущей временной зоны. Параметры текущей временной зоны в ОС настраиваются. Переходы «зима/лето» не оказывают никакого влияния на синхронизацию времени.
Для обеспечения наиболее полной интеграции «Сервера единого времени» со SCADA «КРУГ-2000» реализованы программные модули интеграции. Поддерживаемые операционные системы: Windows_2000/XP, Linux и QNX. Модули интеграции контролируют работу служб точного времени и обеспечивают вывод сообщений диагностики синхронизации времени в протокол событий. Таким образом, Пользователь может оперативно получать информацию о проведённых коррекциях времени, а также о возможных сбоях синхронизации времени. В случае сбоев диагностические сообщения позволяют оперативно устранить возникшие неполадки.
Преимущества и достоинства «Сервера единого времени»:
- высокая точность синхронизации системного времени абонентов сети;
- малые габариты;
- возможность применения в промышленных условиях эксплуатации;
- возможность резервирования;
- простота настройки и эксплуатации;
- цена – ниже известных аналогов.
Научно-производственная фирма «КРУГ»
Россия, 440028 г. Пенза, ул. Германа Титова, 1
тел.: (841-2) 49-97-75
e-mail: krug@krug2000.ru
© 2002 — 2021 НПФ «КРУГ». Права на все материалы, использованные на данном сайте, принадлежат НПФ «КРУГ»
Ваши персональные данные могут подвергаться обработке в соответствии с «Законом о персональных данных» 152-ФЗ
Политика в отношении обработки персональных данных
Таймеры и синхронизация времени
Данный документ описывает основные настройки, которые следует сделать для рабочих станций сети ИКИР, чтобы время на них было максимально точным.
Максимально точное единое время для рабочих станций в сети ИКИР является важной задачей не только для офисных работ, но в первую очередь для автоматизированных систем сбора данных. Технологии синхронизации для Linux и Windows описаны в Бюллетене от 02.09.2002. Этот документ кратко повторяет оттуда основные данные и уточняет необходимые настройки непосредственно для нашей сети.
Основные идеи синхронизации
- Для синхронизации времени компьютеров через сеть Интернет и через локальную сеть созданы программы, которые реализуют NTP (Network Time Protocol).
- В нашей локальной сети есть сервера, которые используются другими компьютерами для синхронизации времени.
- Настройка времени делается по данным с этих серверов скачком при первом запуске программы управления синхронизацией на рабочей станции.
- После начальной синхронизации никаких подстроек времени скачком не делается. В дальнейшем программа синхронизации регулярно опрашивает сервера и подстраивает системный таймер так, чтобы идти в ногу со временем серверов.
- Сами сервера времени получают время из Интернет и/или с GPS, используя тот же NTP-протокол, что и рабочие станции, стараются максимально точно быть синхронизированными с единым мировым временем.
- Сервера времени ИКИР имеют названия ntp0.pt.ikir.ru и ntp1.pt.ikir.ru.
Программы синхронизации.
Программы управления временем и их конфиги в Linux и Windows очень близки (для Windows, к счастью, нашёлся сторонний разработчик, который полноценно реализовал ntpd).
В Ubuntu должен быть установлен пакет ntp. Он входит в состав дистрибутивов Linux.
Установка делается так:
apt-get install ntp
timedatectl set-ntp no
Чтобы сервис ntp стартовал при перезагрузке:
systemctl enable ntp
Чтобы стартовать сервис:
systemctl restart ntp
В Windows должны быть установлены программы ntp-4.2.4p6@vegas-v2-o-win32-setup.exe и ntp-time-server-monitor-104.exe. Эти программы можно взять с сайта http://www.meinberg.de или с нашего внутреннего http:/appserver/windows/CD1/INSTALL/NTP. При установке автоматически сервис стартует и в дальнейшем будет делать это после перезагрузки.
В конфигурацонном файле ntp.conf (в Linux он находится в каталоге /etc, а в Windows в C:Program FilesNTPetc), должны быть следующие строки:
server ntp0.pt.ikir.ru minpoll 4 maxpoll 10
server ntp1.pt.ikir.ru minpoll 4 maxpoll 10
Наблюдение за синхронизацией.
Что означают колонки в этом выводе?
- remote — NTP-сервер, с которым наш хост синхронизуется. Ключ -n при запуске ntpq показывает IP-адрес вместо имёни.
- refid — откуда сервер сам получает время. Это может быть другой хост или запись .GPS., говорящая о том, что на хосте время берётся из GPS-приёмника
- st — Stratum (уровень). Число от 1 до 16, указывающее на точность сервера.
Единица означает максимальную точность, 16 — сервер недоступен.
Уровень вашего компьютера при использовании кем-то другим будет равен уровню наименее точного удаленного сервера плюс 1. - when —Секунда после последнего обращения к сервреру.
- poll —Интервал между опросами в секундах. Значение будет изменяться между минимальной и максимальной частотой опросов.
Вначале интервал будет минимальным (параметр minpoll при запуске ntpd), чтобы синхронизация происходила побыстрее.
После того, как часы синхронизируются, интервал начинает увеличиваться, чтобы уменьшить трафик и нагрузку на другие сервера времени. - reach — Восьмеричное значение 8-ми бит. Каждый бит — это результат одной попытки соединения с сервером.
Представлен результат последних 8-ми попыток (по числу битов).
Бит равен 1, если был получен ответ от удаленного сервера. - delay — Количество миллисекунд для получения ответа на запрос времени.
- offset — Разница между временем локального и удаленного серверов в миллисекундах. В ходе синхронизации это значение должно понижаться, указывая на то, что часы локальной машины идут все точнее.
- jitter Дисперсия (Jitter) — дисперсия отклонений от значения смещения (поле offset) по нескольким успешным запросам времени. Меньшее значение дисперсии предпочтительнее.
Знаки перед именами(номерами) серверов означают:
— наш NTP не предпочитает этот сервер.
+ наш NTP предпочитает этот сервер.
x хост не подходит для синхронизации.
* cамый предпочтительный сервер на данный момент.
Устройства для синхронизации.
На момент написания бюллетеня 2 сервера времени получают время из Internet-а, а 1 сервер имеет stratum 1 — получает время от GPS-приёмника.
Примитивная разовая синхронизация в Windows.
Для того, чтобы рабочая станция под Windows при загрузке системы синхронизовала свои часы с сервером времени без использования протокола ntpd, можно использовать возможности SMB-протокола. Следующая команда в Windows синхронизует время с нашим внутренним сервером времени:
net time \commserv /set /yes
Эту строчку стоит написать в BAT-файле и сам BAT-файл запихнуть в каталог автозагрузки.
Институт космофизических исследований и распространения радиоволн ДВО РАН © 1999-2016 Powered by OpenCMS
Настройка синхронизации времени между серверами.
Для синхронизации внутренних часов серверов с внешним источником или между собой применяется протокол NTP.
Для начала немного теории для понимания того, что мы делаем. И главное — зачем?
Начнём с того, что время между серверами синхронизировать не просто можно, но и нужно. Практически в обязательном порядке. В том случае, если время на серверах (логических разделах) сильно разнится, то вы рискуете получить огромное количество проблем. И что самое забавное, не всегда источник этих проблем можно будет определить. Самый простой пример — Kerberos. В случае рассинхронизации времени между клиентом, сервером Kerberos, и сервером приложений, вполне вероятна ситуация, когда клиент не сможет получить сервис у сервера приложений. И это не смотря на то, что тикет с Kerberos сервера будет успешно получен. Почему? Да потому что, серверу приложений может показаться что тикет клиента устарел ещё пол-часа назад. А всё из-за разницы во времени. И это самый простой пример. Можно упомянуть и HACMP c delay timers. И стандартные системы аутентификации AIX (начиная с compat и заканчивая LDAP). И многое, многое другое… Будем считать, что в необходимости синхронизации времени мы вас убедили.
Роли серверов:
Сервер(server) – по запросу дает точное время клиентам. Роль могут брать на себя сервера различного уровня (stratum).
Пир(peer) – берет время с сервера и по запросу может его отдавать. Обычно эта роль может применяться для серверов с уровнем 1 или 2.
Клиент – компьютеры, которые получают время от серверов с низким уровнем(обычно 1 или 2), но никогда его не отдает.
Несколько слов о безопасности NTP. NTP при работе использует UDP и TCP. Порт 123. Очень важно правильно настроить firewall в вашей сети. В противном случае вы рискуете нарваться на атаку «компрометация сервера времени». Что чревато отказом в обслуживании со стороны серверов приложений и серверов аутентификации. Да и внешний источник времени надо выбирать аккуратно. По тем же причинам.
Для повышения уровня безопасности можно в конфигурационный файл добавить строку:
restrict default noserve noquery
Наличие такой строки запрещает узлу отвечать на внешние запросы связанные со временем.
Уровень(stratum) – все сервера времени распределены на уровни. Сервер уровня 1 берет время из внешнего источника(уровень 0). Сервера уровня 2 берут время от сервера уровня 1 и так далее. Максимальный уровень сервера может быть 15, т.е уровней всего 16.
В качестве источника точного времени можно использовать всё что угодно. Вы можете определить источником точного времени сервер в Internet, можете получать время с подключенного GPS приёмника. Да хоть солнечные часы. Главное что бы вы смогли с них данные снять.
Итак начнем настраивать AIX в соответствии с выбраной схемой.
На каждом сервере необходимо выполнить несколько действий:
1.Настройка файла конфигурации NTP /etc/ntp.conf
2.Синхронизация с источником времени предыдущего уровня.
3.Старт xntpd демона. Команда smitty xntpd -> выбрать «both» (запустить сейчас и после перезагрузки).
4.Проверить синхронизацию командой ntpq -p
Настройка /etc/ntp.conf для сервера(уровень 1)
server 127.127.1.0
fudge 127.127.1.5 stratum 1
server pool.ntp.org # пул серверов точного времени в интернете или какой-нибудь другой источник времени
driftfile /etc/ntp.drift
tracefile /etc/ntp.trace
Настройка /etc/ntp.conf для серверов 2го уровня.
server 127.127.1.0
fudge 127.127.1.5 stratum 2
server 10.1.1.100 # ip адрес или имя сервера более низкого уровня в локальной сети
peer 10.1.1.150 # ip адрес пира, находящегося на том же уровне
driftfile /etc/ntp.drift
tracefile /etc/ntp.trace
Настройка /etc/ntp.conf для клиентов:
server 127.127.1.0
fudge 127.127.1.0 stratum 3
server 10.1.1.150 # ip адрес или имя сервера более низкого уровня в локальной сети
server 10.1.1.151 # ip адрес или имя сервера более низкого уровня в локальной сети
driftfile /etc/ntp.drift
tracefile /etc/ntp.trace
Для упрощения можно оставить только уровень сервера верхнего уровня и уровень клиентов.