2009-11-02 2 views
0

Я пишу код, который должен знать, сколько из синхронизации клиента и времени одного сервера.Код синхронизации времени

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

Может кто-то подтвердить это поведение или придумать другой способ сделать это?

ответ

2

Почему бы не получить эпоху на клиенте и отправить ее на сервер, когда клиент начинает общение с сервером, тогда нет необходимости в smb-ресурсе. Сравнивая время эпохи между собой, вы будете иметь свое смещение по времени в секундах. Можете использовать rest/soap, socket и т. Д., Чтобы сообщать об этом между клиентом и сервером в зависимости от того, как выглядит ваша модель клиент/сервер.

1

Я полагаю, что ключевыми являются ключевые переменные (например, IO). Какую меру вы ищете? Я также не уверен, что это (строго говоря), связанное с Java.

В любом случае, мне кажется, вам нужна сравнительная операция.

Две разные машины записывают на общее устройство (ваш SMB) и каждый создает файл, содержащий their epoch. В идеале, чтобы свести к минимуму проблемы с задержкой, вы хотели бы получить эту эпоху, полученную как раз перед тем, как писать, а затем сразу же закрыть файл.

Затем клиент сравнивает свою собственную эпоху и временную метку файла с файлом сервера и его содержанием эпохи. Эти 4 меры должны предоставить достаточную информацию, чтобы получить представление о относительной разнице между временем эпохи JVM.

[Редактировать уточнить]

Например, кортеж сервера является ({эпоха, ц}): {S_t, SMB_ts}, и клиент {C_S_t, SMB_C_ts}. Допустим, вы получили (смешные номера здесь) {5000, 4800} и {5100, 5000}. Возьмите разницу между меткой времени сервера и печатью клиента (здесь 4800 - 5000 => -200) и добавьте к клиенту эпоху (здесь 5100 + (- 200) => 4900). Таким образом, клиент находится на 100 единиц позади сервера.

[Final редактировать]: (Обратите внимание, что у вас есть 3 часов, чтобы иметь дело с здесь:. SMB-х, серверы, и клиента)

+0

Хотя это будет работать, задействованы только два такта. На сервере работает общий ресурс SMB. –

2

Вы можете синхронизировать и с общим сервером NTP и не беспокоиться об этом. Добавлен бонус наличия (более) правильных часов!

+0

Уже сделал это. Но не все клиенты находятся на расстоянии ping от сервера NTP. –

+2

Затем настройте локальный сервер ntp и позвольте клиенту синхронизировать его. Это устраняет проблему, а не симптом. –

Смежные вопросы