时间同步与高延迟

时间:2012-10-09 18:16:12

标签: php javascript ajax timer

我正在制作拍卖脚本,并且必须在访问者和服务器之间进行时间同步(拍卖结束时间)。每次用户出价时,拍卖结束时间都会延长几秒钟。我的问题是有几个用户抱怨他们的计时器跳过(几秒钟),并发现这是因为高延迟连接。

我当前的算法有一个每秒运行一次的javascript函数,通过ajax请求为拍卖留出时间。是否有更好的方法来解决这个问题,特别是对于高延迟用户,以防止计时器跳过问题?

3 个答案:

答案 0 :(得分:2)

您是否考虑过长时间的民意调查?使用您可以使用jquery / javascript倒计时时钟,然后只需在新的出价时更改倒计时时间。应该彻底削减你的ajax电话。

答案 1 :(得分:2)

自适应间隔

首先,我建议你减少投票量。我不知道你的服务器实现,但是当你有几个用户时,当前的设置会产生很多请求。

我建议您根据剩余时间调整轮询间隔。如果在拍卖结束前还有两个小时的时间,我们可能并不关心是否每分钟只从服务器获取额外的秒数,对吧?你可以这样做

pollingInterval = secondsLeft / 100

间隔时间较短,结果在拍卖结束时更准确。

服务器已发送事件

在最后一分钟左右,当您需要高精度时,短时间间隔的定期轮询不是最佳解决方案,如评论中所述。长轮询是一种选择,但您还应该查看HTML5 Server Sent Events,这类似于长轮询的本机浏览器实现。有一个good introduction and comparison to Websockets。对于不受支持的浏览器,浏览器支持已经非常好了there's a polyfill,这些浏览器可以追溯到......轮询。

答案 2 :(得分:1)

  

每秒运行的javascript函数

这是做你想做的旧方法。

我认为您需要使用网络套接字来确保所有用户的实时投放。 如果您想节省时间,可以使用任何可用的Web插槽服务器,而不是自己制作。

我更喜欢Real-Time Pusher 它很简单,您可以免费使用它,但用户数量有限。您还可以升级更多用户。 www.pusher.com

此外,有良好的API文档可以帮助您快速轻松地实现您想要的功能。

有关Pusher-or-websockets的任何帮助,请随时提出。