背景
我正在创建一个AJAX聊天系统。它看起来像这样:
Mike - 嗨 Jane - 5分钟前
Jane - 嗨 Mike - 4分钟前
Mike - 最近怎么样?- 3秒钟前
Jane - 我很好 - 1秒钟前
Javascript每分钟轮询服务器,并且服务器会响应最新的10条消息。每个消息都附带有一个Unix时间戳(PHP time())。Javascript负责将用户当前缓冲的消息与此新的服务器响应合并。消息的交错和“X时间前”消息的准确性取决于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;
}
}