我正在建设一个网站,其中有时间和价格滴答下跌。我最关心的事情是同步时间,这样它在所有客户端上都尽可能准确。
目前,我正在向客户端发送剩余的毫秒数,然后用它来为倒计时计时器提供燃料,但由于传输和渲染延迟,即使在同一台计算机上有两个浏览器,这也可能会关闭几秒钟。
有没有一种方法可以同步客户端的javascript时间和服务器时间,或者我只是必须处理这种轻微的延迟?
如果有一种方法可以准确地测量发送数据的服务器与客户端接收和呈现的数据之间的时间差就好了。
发布于 2011-03-19 05:02:45
即使服务器和客户端的时间不同,时间更改的速率也应该是相同的。我会将剩余时间发送给客户端,然后让客户端将该时间与当前时间相加,然后让客户端根据该时间计算倒计时。例如:
var timeRemaining = [rendered on page load or queried by ajax]; // in milliseconds
var endTime = new Date(new Date().getTime() + timeRemaining);
// Put this in a setInterval, or however you currently handle it
var countdown = (endTime.getTime() - new Date().getTime()) / 1000;
发布于 2012-08-15 03:54:40
有一种方法可以使客户端与服务器的时间同步。我写了一个库来做这件事: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
发布于 2011-03-19 04:56:14
您可以测量完整的服务器往返所用的时间,然后除以2,从而得到一个很好的时间差估计。请注意:不能保证IP包在两个方向上采用相同的路由,但可能性相当高。
如果毫秒分辨率对你来说足够了,你可以使用Date.getTime()
。
https://stackoverflow.com/questions/5357719
复制相似问题