FAQ по работе локального времени

Обсуждение работы движка сервера. Ваши предложения по улучшению игры. Вопросы по интерфейсу и механике игры

Модератор: Gorlum

Ответить
Gorlum
Император Вселенной
Сообщения: 7512
Зарегистрирован: 13 июн 2009, 15:06
Контактная информация:

FAQ по работе локального времени

Сообщение Gorlum » 04 июл 2013, 21:45

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

Q: Что такое локальное время?
A: Интернет - это международная сеть. Так исторически сложилось, что в разных частях мира существуют разные часовые пояса. Поэтому при взаимодействии между сервером в одной части мира и пользователем в другой периодически возникают проблемы с разницей между временем сервера (далее - серверное время) и временем на компьютере пользователя (далее - клиентское время). Для удобства пользователя принято выводить дату и время, преобразовывая их из времени сервера к времени пользователя.

Q: Как обстоят дела у СН с локальным временем?
A: Уже достаточно давно большая часть интерфейса использует клиентское время, однако так было далеко не везде. Часть сообщений от сервера (который не имеет прямого доступа к клиентскому времени) по прежнему использовал серверное время. Патч 37а1 полностью устранил эту проблему viewtopic.php?f=2&t=2431#p32531

Q: Как же "полностью устранил", если у меня время всё равно глючило!!!
A: В патче был реализован автоматизированный замер разницы времени между сервером и клиентом. Вышеуказанный патч работал в большинстве случаев - но далеко не всегда. Оказалось, что на некоторых конфигурациях он выдает ошибки. И дело не в ошибках реализации, а в разнообразии возможных вариантов разницы клиентского и серверного времени (см. ниже).

Q: Зачем так сложно - какие-то автоматические замеры, галочки?! Почему нельзя просто дать пользователю возможность установить свой часовой пояс?
A: Начнем с того, что СН - это игра, в которой важна точность вплоть до нескольких секунд. Сама по себе установка часового пояса позволяет лишь скорректировать часы - что напрямую следует из определения "часового пояса". Но вот если на клиентском компьютере время отстает или спешит на несколько секунд (или даже минут!) - с этим выставление часового пояса не справится. И это только самая очевидная проблема! Менее очевидной проблемой является то, что зачастую на клиентских компьютерах неправильно выставлен часовой пояс - кстати, это была один из проблемных случаев, когда первая версия автоматического скрипта неправильно определяла разницу во времени. Еще менее очевидной проблемой является то, что периодически государства законодательно меняют время перехода на летнее/зимнее время (привет россиянам!), а в ОС далеко не всегда вносятся такие изменения - это еще один случай ошибки старого автоматического скрипта. Учет всех этих вариантов и их отработка потребовал нескольких патчей для воплощения полнофункционального алгоритма определения времени.

Q: Почему за основу выбрано клиентское, а не серверное время?
A: Потому что в подавляющем большинстве случаев пользователю удобнее наблюдать именно клиентское время. Серверное время важно буквально для одной фишки СН - для согласования времени САБа. Для всего остального удобнее клиентское.

Q: Так как же это всё работает?
A: А работает это так - после корректной процедуры определения разницы во времени (см. ниже) "Локальное время" в игре будет до 1-2 секунд совпадать со временем на клиентском компьютере. Соответственно, всё время в игре будет совпадать с внутриигровым локальным временем.

Q: А почему "с точностью до 1-2 секунд"? Почему не секунда в секунду?
A: Потому что сам процесс синхронизации занимает некоторое время. Вот на это время внутриигровое локальное время будет отличаться от времени на компьютере игрока. Существуют специальные алгоритмы синхронизации, которые учитывают задержки при передаче синхропакетов в сети - но они весьма сложные и нетривиальные, поэтому в СН они не реализованы. Возможно будут реализованы позже.

Q: У меня вроде всё работало нормально - а потом начало глючить!
A: Причин может быть несколько: переход на летнее/зимнее время; изменение настроек часов; смена часового пояса итд. В любом таком случае нужно произвести замер разницы между клиентом и сервером еще раз:
  1. Перейдите на страницу "Настройки", поставьте галочку "Замерить разницу между локальным (клиентским) и серверным временем" и нажмите кнопку "Сохранить изменения" в самом низу страницы. Дождитесь полной загрузки страницы
  2. Перейдите на страницу "Обзор планеты"
Q: У меня НИ РАБОТАИТ!!!!!!
A: Проделайте следующие действия. ВСЕ действия и в УКАЗАННОМ порядке:
  1. В окне браузера нажмите кнопку F5 и дождитесь полной загрузки страницы
  2. В окне браузера нажмите кнопку F5 и дождитесь полной загрузки страницы
  3. В окне браузера нажмите кнопку F5 и дождитесь полной загрузки страницы
  4. Перейдите на страницу "Настройки", поставьте галочку "Замерить разницу между локальным (клиентским) и серверным временем" и нажмите кнопку "Сохранить изменения" в самом низу страницы. Дождитесь полной загрузки страницы
  5. Перейдите на страницу "Обзор планеты"
  6. В окне браузера нажмите кнопку F5 и дождитесь полной загрузки страницы
  7. Теперь на сервере сохранена информация о разнице между серверным временем и локальным (клиентским) временем
Q: У меня ВСЬО РАВНО НИ РАБОТАИТ!!!!!!
A: Пишем багрепорт на специальном форуме: viewforum.php?f=65 Как правильно писать об ошибке указано тут: viewtopic.php?f=65&t=1102
ВНИМАНИЕ! Администрация в личную переписку не вступает, рукописи не возвращает и не рецензирует!
* Если у меня слишком хорошее настроение - я хожу почитать чат *

Аватара пользователя
kraynyukhov
Спонсор
Сообщения: 145
Зарегистрирован: 20 окт 2011, 17:05

Re: FAQ по работе локального времени

Сообщение kraynyukhov » 05 июл 2013, 00:01

Спасибо. Данную статью можно прикрутить к основному FAQ.(imho)

Ответить

Вернуться в «Движок сервера: жалобы и предложения»