时间同步与高延迟

yow*_*ita 9 javascript php ajax timer

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

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

pix*_*tik 2

自适应间隔

首先,我建议您减少轮询量。我不知道您的服务器实现情况,但是一旦您有几个用户,当前的设置就会创建大量请求。

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

pollingInterval = secondsLeft / 100
Run Code Online (Sandbox Code Playgroud)

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

服务器发送事件

正如评论中所讨论的,在最后一分钟左右,当您想要高精度时,短时间间隔的定期轮询并不是最佳解决方案。长轮询是一个选项,但您还应该查看 HTML5 Server Sent Events,它就像长轮询的本机浏览器实现。对 Websockets有很好的介绍和比较。浏览器支持已经相当不错了,对于不支持的浏览器有一个填充程序,它会回退到......轮询。