ФОН
Я создаю систему чата AJAX. Это выглядит примерно так:
Майк - привет Джейн - 5 минут назад
Джейн - привет, Майк - 4 минуты назад
Майк - как дела - 3 секунды назад
Джейн - У меня все хорошо - 1 секунду назад
Javascript опрашивает сервер каждую минуту, и сервер отвечает 10 самыми новыми сообщениями. К каждому сообщению прикреплена метка времени Unix (PHP time ()). Javascript отвечает за объединение буферизованных сообщений, которые пользователь в настоящее время имеет, с этим новым ответом сервера. Чередование сообщений и точность сообщения «X time ago» зависит от того, насколько хорошо часы Javascript синхронизированы с часами сервера.
ВОПРОС
Как вы точно синхронизируете часы Javascript с часами сервера? Ниже то, что я имею до сих пор. Я хотел бы сделать это более точным. В настоящее время он не учитывает время приема-передачи Ajax, которое выполняет синхронизацию. Как мне узнать, какая часть туда и обратно отправляет, обрабатывает и получает? Кроме того, как вы справляетесь с пользователями, чьи кристаллы часов просто обанкротились - например: сейчас 7:20 вечера по Гринвичу, но на самом деле их часы показывают 7:15 вечера по Гринвичу?
Clock = {
serverOffset = 0;
synch: function() {
new Ajax.Request(
'/getServerTime.php', {
onSuccess: function(transport) {
this.serverOffset = parseInt(transport.responseText) -
new Date().getTime() / 1000;
}
}
);
},
getServerTime: function(myTime) {
if (typeof(myTime) === 'undefined') {
myTime = new Date().getTime() / 1000;
}
return myTime + this.serverOffset;
},
serverToMyTime: function(serverTime) {
return serverTime - this.serverOffset;
}
}