9

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

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

4

3 回答 3

2

自适应间隔

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

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

pollingInterval = secondsLeft / 100

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

服务器发送事件

在最后一分钟左右,当您想要高精度时,如评论中所讨论的那样,在短时间内定期轮询并不是最佳解决方案。长轮询是一种选择,但您还应该查看 HTML5 Server Sent Events,它类似于长轮询的本机浏览器实现。对 Websockets有很好的介绍和比较。浏览器支持已经相当不错了,有一个针对不受支持的浏览器的 polyfill,它回退到……轮询。

于 2012-10-10T09:10:17.160 回答
2

你有没有研究过长轮询?使用您可以使用 jquery/javascript 倒计时时钟,然后在每次下新出价时更改倒计时时间。应该大幅减少你的 ajax 调用。

于 2012-10-09T19:02:18.467 回答
1

javascript function that runs every second

This the old way to do what you want.

I think you need to use web-sockets to ensure real-time delivery for all users. If you want to save time you can use any web-socket servers available instead of making it yourself.

I prefer Real-Time Pusher It's easy and you can use it free but with a limited number of users. Also you can upgrade for more users. www.pusher.com

Also, have good API documentation to help you to implement what you want fast and easy.

For any help with Pusher-or-websockets feel free to ask.

于 2012-10-10T08:14:59.727 回答