gpt4 book ai didi

php - 将 Javascript 时钟与服务器时钟同步

转载 作者:可可西里 更新时间:2023-11-01 00:27:00 27 4
gpt4 key购买 nike

背景

我正在创建一个 AJAX 聊天系统。它看起来像这样:

Mike - hi Jane - 5 minutes ago

Jane - hi Mike - 4 minutes ago

Mike - how's it going - 3 seconds ago

Jane - I'm doing good - 1 second ago

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;
}
}

最佳答案

正如我在 this answer 中解释的那样,您的精确度是有限度的-- 本质上,任何小于请求往返时间的时钟偏差都是检测不到的。如果您真的需要尽可能精确的时间,请为服务器创建一个特殊的请求类型来获取时间,并尽可能快地进行往返。

不过,您可以识别出本地时钟明显异常的浏览器,因为观察到的服务器时间不会落在请求的本地开始时间和结束时间之间。由于您不能将它收紧得更远,只需在本地请求 [start, end] 间隔内选择一个任意时间,并将其视为等同于接收到的服务器时间。

关于php - 将 Javascript 时钟与服务器时钟同步,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4272978/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com