javascript - 如何将客户端网页计时器与服务器同步

标签 javascript ajax time synchronization client-side

将网页上的时间与服务器同步的最佳方法是什么?

我的网页需要为所有用户同时开始倒计时,并在同一时间结束,以防止任何一个用户有轻微的时间优势。

我的问题与这个问题类似,但接受的答案有帮助但没有完全回答我的问题:how-to-sync-a-javascript-countdown-with-server-time

我在页面加载后使用 Ajax 获取服务器时间,但我能否保证超过 15 分钟倒计时将在每个客户端的同一时间结束?

即使计时器准确地测量时间,由于忽略 setInterval 的毫秒数,客户端页面之间仍可能存在不到 1 秒的差异 - 有什么方法可以克服这个问题吗?

最佳答案

接受的答案很好,并且在我编写一个库来解决这个问题时帮助激励了我。该库通过查看自身的加载时间而不是整个页面(如上面的 performance.timing 所做的那样)产生更精确的答案,然后通过一系列 10 个 XMLHttpRequests 获得更高的精度。此外,针对您的第二个问题,我的图书馆不会忽略毫秒(接受的答案也是如此)。

库名为 ServerDate并且免费提供。

这是自述文件的一部分:

您可以像使用 Date 函数或其函数之一一样使用 ServerDate 实例,例如:

> ServerDate()
"Mon Aug 13 2012 20:26:34 GMT-0300 (ART)"

> ServerDate.now()
1344900478753

> ServerDate.getMilliseconds()
22

还有一种新方法可以获取ServerDate对 服务器的时钟(以毫秒为单位):

> ServerDate.toLocaleString() + " ± " + ServerDate.getPrecision() + " ms"
"Tue Aug 14 01:01:49 2012 ± 108 ms"

您可以看到服务器时钟和浏览器时钟之间的差异,以毫秒为单位:

> ServerDate - new Date()
39

关于javascript - 如何将客户端网页计时器与服务器同步,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9350928/

相关文章:

javascript - 我的 Angular 路线在我在 app.js 中定义的实际 URL 之前有一个 '#%2F'

javascript - 确定嵌套 HTML 列表内相邻的 <li>

javascript - 在 Web 服务器上安装 CasperJS 和 PhantomJS

javascript - 仅显示 localStorage 数据数组中的第一项

c# - 如何检查字符串值的时间格式是否正确?

javascript - Javascript 中的 for 循环

javascript - 使用 AJAX/Fullcalendar 事件 JSON 从 .NET 文件夹中提取 JSON 文件

javascript - ASP.NET:如何使 onClientClick 在回发之前完成工作?

javascript - 如何根据一天中的时间更改消息?

javascript - 双向同步(解决时间依赖)