Avtoprokat-rzn.ru

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

Как синхронизировать отсчет времени 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.
Читайте так же:
Регулировки кпп к 701

ПТС «Сервер единого времени» поддерживает работу в двух режимах:

  1. «широковещательный» режим;
  2. режим «клиент-сервер».

Режим «клиент-сервер». В режиме «клиент-сервер» абоненты периодически отправляют запросы серверу времени на получение точного времени. Получив запрос, сервер времени сразу же отправляет запросившему абоненту ответ, содержащий метку времени. Данный режим позволяет синхронизировать время на абонентах с гораздо меньшей погрешностью. Уменьшение погрешности достигается за счёт того, что абонент, зная время отправки запроса и получения ответа, может рассчитать и учесть при синхронизации величину задержки. Но при его использовании существует ограничение количества абонентов, зависящее от производительности аппаратной платформы и пропускной способности сети. Одна аппаратная платформа в режиме «клиент-сервер» может обеспечить синхронизацию времени примерно на 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

Читайте так же:
Регулировка клапанов кия церато 2010

© 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) по нескольким успешным запросам времени. Меньшее значение дисперсии предпочтительнее.
Читайте так же:
Москвич 2141 как отрегулировать трос сцепления

Знаки перед именами(номерами) серверов означают:
наш 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). И многое, многое другое… Будем считать, что в необходимости синхронизации времени мы вас убедили.

Читайте так же:
Регулировка карбюратора на yamaha enduro 40

Роли серверов:
Сервер(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 приёмника. Да хоть солнечные часы. Главное что бы вы смогли с них данные снять.

ntp.jpg

Итак начнем настраивать 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

Для упрощения можно оставить только уровень сервера верхнего уровня и уровень клиентов.

голоса
Рейтинг статьи
Ссылка на основную публикацию
Adblock
detector