我正在制作拍卖脚本,并且必须在访问者和服务器之间进行时间同步(拍卖结束时间)。每次用户出价时,拍卖结束时间都会延长几秒钟。我的问题是有几个用户抱怨他们的计时器跳过(几秒钟),并发现这是因为高延迟连接。
我当前的算法有一个每秒运行一次的javascript函数,通过ajax请求为拍卖留出时间。是否有更好的方法来解决这个问题,特别是对于高延迟用户,以防止计时器跳过问题?
答案 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的任何帮助,请随时提出。