还有一个方法是,每发出一个用户短信,就往数据库里面加条记录,记录里面有发出的时间,然后每分钟check一下DB,看看有没有超时的用户,就给他发短信

解决方案 »

  1.   

    libin19830213(游戏与娱乐) ( ) 信誉:100 
    的方法,可以试一下,哈,
      

  2.   

    libin19830213(游戏与娱乐) ( ) 信誉:100 
    的方法好像不行哦,如果用户答了题,但我不知道他是哪个线程,我没办法停止它了!!
      

  3.   

    libin19830213(游戏与娱乐) 的方法应该没问题lz把发出去的问题和监视他的线程做个映射不就行了
      

  4.   

    构造一个Container
    向用户发出一个问题,分配一个UID ,放入Container . 同时启动一个UID名的TIMER (10分种后发答题超时 ,同时从Container 中取出UID ) . 
    如果用户在10 分种内回答题目, 从Container 取出UID , 业务处理.该UID名的TIMER cancel
    如果用户在10 分种后回答题目, Container 中已经没有该UID , 业务处理"发答题超时".....
      

  5.   

    本人没开发过短信业务  不过有个想法 希望能帮到你   :不用检查客户的答题状态 
         
         类似做个时间线程     当你发送题目之后,就启动这个线程,如果接收到客户的答题结果就停止线程,如果没有而且超过10分钟时,可以在线程里触发消息。你看行么?===============================================比起上面这个方法,我更赞同还有一个方法是,每发出一个用户短信,就往数据库里面加条记录,记录里面有发出的时间,然后每分钟check一下DB,看看有没有超时的用户,就给他发短信周期可以缩短无论你是什么服务器 线程达到一定数量结果是什么应该不用说了吧  采用上面的方法,除非在你确认用户量很小,==========================构造一个Container
    向用户发出一个问题,分配一个UID ,放入Container . 同时启动一个UID名的TIMER (10分种后发答题超时 ,同时从Container 中取出UID ) . 
    如果用户在10 分种内回答题目, 从Container 取出UID , 业务处理.该UID名的TIMER cancel
    如果用户在10 分种后回答题目, Container 中已经没有该UID , 业务处理"发答题超时".....此方法绝对不可用,
      

  6.   

    我又想到了一个新的方案,提出来问一下大像可行不:
    短信上行,就像一个request请求,不同的是每次上行Session 都不一样。。
    所以,我在下行题目时:
    我用:
         HttpSession session = request.getSession();
         session.setMaxInactiveInterval(10*60);
         session.setAttribute("problemID","下行题目ID号");
    再做一个Listener:
         public class ExamSessionListener implements HttpSessionListener { public void sessionCreated(HttpSessionEvent se) {
    // TODO Auto-generated method stub } public void sessionDestroyed(HttpSessionEvent se) {
    // TODO Auto-generated method stub
         System.out.println("销毁SessionID:" + se.getSession().getId());
                  String proID = se.getSession().getAttribute("problemID");
                  //连接数据库,判断是否已回答该题
                  .....
                  
                  //如果没有回答
                  MessageDAO.sendMsg("回答超时"); }}