论坛首页 Java企业应用论坛

倒计时的实现

浏览 12690 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2013-04-15   最后修改:2013-04-22
     在项目中要实现这样一个功能,用户下订单之后,那么用户在规定时间内就要进行操作。如果不进行任何操作,则自动视为放弃。用户在界面可以看到倒计时。
     首先第一个问题,倒计时显示的精度问题,页面显示倒计时,肯定是先通过ajax请求后台获取数据,但是传输数据也会需要一定的时间,一般情况可能就几秒的时间也就无所谓了。但是我就怕碰到特殊情况。例如服务器卡了。或者网速很慢。导致误差较大。我想到的解决方案是在ajax接收到返回数据时再减去传输数据所用时间,这样能减少误差。
     第二个问题,用户如果不在规定时间内进行操作,那么系统就视为放弃订单,需要立即修改订单状态。目前我想的方案是:在用户下订单之时,就开启一个定时器线程。在规定时间结束时判断该条记录是否已进行操作,如果未进行操作则修改状态为已放弃。

     我就是想问问大家,第一个问题有没有更好的解决方案,第二个问题的话,我是考虑如果用户下订单很多。会不会对服务器造成很大压力,有没有什么解决方法,或者有其他更优的解决方案。如果能有类似功能的示例就更好了。
   发表时间:2013-04-16  
第一个方案没问题,第二个方案可以只用一个线程,不用每个订单都开启一个线程.
0 请登录后投票
   发表时间:2013-04-16  
renci 写道
第一个方案没问题,第二个方案可以只用一个线程,不用每个订单都开启一个线程.

正解!
0 请登录后投票
   发表时间:2013-04-16  
renci 写道
第一个方案没问题,第二个方案可以只用一个线程,不用每个订单都开启一个线程.
具体怎么实现能说下吗?
0 请登录后投票
   发表时间:2013-04-16  
第一个问题使用AJAX实现NTP协议即可准确同步前后端时间;第二个问题嘛,根本不是问题,不需要新开任何线程。
0 请登录后投票
   发表时间:2013-04-16  
pittlu 写道
第一个问题使用AJAX实现NTP协议即可准确同步前后端时间;第二个问题嘛,根本不是问题,不需要新开任何线程。

求指教。其实我想了想觉得还可以用触发器来解决。
0 请登录后投票
   发表时间:2013-04-17  
每个订单添加一个添加时间,当用户去触发订单时,检测订单是否过时,如果已过期,则告诉用户。
启动一个全局的线程,定期去检测数据库订单,如果过时则修改订单状态。
0 请登录后投票
   发表时间:2013-04-17  
明显可以用java.util.Deque<E>。为每个订单添加一个java.util.concurrent.Delayed,放入Deque,同时放入http session(供ajax查询),使用一个或多个全局的分发线程,处理Deque里面超时的项(即修改数据库状态)。
0 请登录后投票
   发表时间:2013-04-17  
第一个问题, 你不用每次时间变化都去ajax请求服务端, 隔个几秒或者几十秒ajax一下, 然后把客户端的时间校正为服务端的时间即可, 当然由于网络引起的一点偏差还是要注意的.


第二个问题, 由于你有超时的限制, 你不需要立刻把订单的状态更改, 只需要用户在前台查看的时候给他一个超时的提醒就好了, 当然实际他发起付款的时候, 你也可以判断一下是不是超时了, 超了就拒绝付款.


至于订单状态的更改不需要实时, 隔一断时间把超时的订单的状态一起改一下就行了..

当然, 如果你还要有超时候给用户发消息的功能的话, 就必须得实时一点, 用一个线程或者线程池就足够了, 不需要每次都新建一个线程, 不然你的内存容易被线程挤爆..

0 请登录后投票
   发表时间:2013-04-19   最后修改:2013-04-19
不要把问题都归类到特别深奥的技术才能解决
得花心思去想一些折中的方案啊
第一个问题,什么苛刻的场景下才会有?
第二个问题,定时任务去扫库
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics