锁定老帖子 主题:倒计时的实现
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2013-04-15
最后修改:2013-04-22
首先第一个问题,倒计时显示的精度问题,页面显示倒计时,肯定是先通过ajax请求后台获取数据,但是传输数据也会需要一定的时间,一般情况可能就几秒的时间也就无所谓了。但是我就怕碰到特殊情况。例如服务器卡了。或者网速很慢。导致误差较大。我想到的解决方案是在ajax接收到返回数据时再减去传输数据所用时间,这样能减少误差。 第二个问题,用户如果不在规定时间内进行操作,那么系统就视为放弃订单,需要立即修改订单状态。目前我想的方案是:在用户下订单之时,就开启一个定时器线程。在规定时间结束时判断该条记录是否已进行操作,如果未进行操作则修改状态为已放弃。 我就是想问问大家,第一个问题有没有更好的解决方案,第二个问题的话,我是考虑如果用户下订单很多。会不会对服务器造成很大压力,有没有什么解决方法,或者有其他更优的解决方案。如果能有类似功能的示例就更好了。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2013-04-16
第一个方案没问题,第二个方案可以只用一个线程,不用每个订单都开启一个线程.
|
|
返回顶楼 | |
发表时间:2013-04-16
renci 写道 第一个方案没问题,第二个方案可以只用一个线程,不用每个订单都开启一个线程.
正解! |
|
返回顶楼 | |
发表时间:2013-04-16
renci 写道 第一个方案没问题,第二个方案可以只用一个线程,不用每个订单都开启一个线程. 具体怎么实现能说下吗?
|
|
返回顶楼 | |
发表时间:2013-04-16
第一个问题使用AJAX实现NTP协议即可准确同步前后端时间;第二个问题嘛,根本不是问题,不需要新开任何线程。
|
|
返回顶楼 | |
发表时间:2013-04-16
pittlu 写道 第一个问题使用AJAX实现NTP协议即可准确同步前后端时间;第二个问题嘛,根本不是问题,不需要新开任何线程。
求指教。其实我想了想觉得还可以用触发器来解决。 |
|
返回顶楼 | |
发表时间:2013-04-17
每个订单添加一个添加时间,当用户去触发订单时,检测订单是否过时,如果已过期,则告诉用户。
启动一个全局的线程,定期去检测数据库订单,如果过时则修改订单状态。 |
|
返回顶楼 | |
发表时间:2013-04-17
明显可以用java.util.Deque<E>。为每个订单添加一个java.util.concurrent.Delayed,放入Deque,同时放入http session(供ajax查询),使用一个或多个全局的分发线程,处理Deque里面超时的项(即修改数据库状态)。
|
|
返回顶楼 | |
发表时间:2013-04-17
第一个问题, 你不用每次时间变化都去ajax请求服务端, 隔个几秒或者几十秒ajax一下, 然后把客户端的时间校正为服务端的时间即可, 当然由于网络引起的一点偏差还是要注意的.
第二个问题, 由于你有超时的限制, 你不需要立刻把订单的状态更改, 只需要用户在前台查看的时候给他一个超时的提醒就好了, 当然实际他发起付款的时候, 你也可以判断一下是不是超时了, 超了就拒绝付款. 至于订单状态的更改不需要实时, 隔一断时间把超时的订单的状态一起改一下就行了.. 当然, 如果你还要有超时候给用户发消息的功能的话, 就必须得实时一点, 用一个线程或者线程池就足够了, 不需要每次都新建一个线程, 不然你的内存容易被线程挤爆.. |
|
返回顶楼 | |
发表时间:2013-04-19
最后修改:2013-04-19
不要把问题都归类到特别深奥的技术才能解决
得花心思去想一些折中的方案啊 第一个问题,什么苛刻的场景下才会有? 第二个问题,定时任务去扫库 |
|
返回顶楼 | |