站内搜索: 请输入搜索关键词

当前页面: 开发资料首页J2EE 专题关于JAVA中自动触发程序,请各位高手提意见,哈,谢了!!

关于JAVA中自动触发程序,请各位高手提意见,哈,谢了!!

摘要: 关于JAVA中自动触发程序,请各位高手提意见,哈,谢了!!


我们要开发一个考试系统,通过发短信进行回答问题!!向用户发了一条问题后,要求在一定的时间内答完,比如10分钟,
用户10分钟内没答完,要求发送短信说“答题超时”,

我们之前解决方案是:在服务器端,做一个程序一直查询看用户的答题状态,但这样消耗大量的资源!!

请各位高手帮忙提供较好的解决方案,哈,谢了!!


啊,怎么没有人啊???哭


没人,自已顶一下,


本人没开发过短信业务 不过有个想法 希望能帮到你

:不用检查客户的答题状态

类似做个时间线程

当你发送题目之后,就启动这个线程,如果接收到客户的答题结果就停止线程,

如果没有而且超过10分钟时,可以在线程里触发消息。

你看行么?




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


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


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


libin19830213(游戏与娱乐) 的方法应该没问题

lz把发出去的问题和监视他的线程做个映射不就行了


如果是用户答了题,
我现在运行的线程怎么停止另一个线程???

两个不同的线程,要怎么通信??


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


本人没开发过短信业务 不过有个想法 希望能帮到你

:不用检查客户的答题状态

类似做个时间线程

当你发送题目之后,就启动这个线程,如果接收到客户的答题结果就停止线程,

如果没有而且超过10分钟时,可以在线程里触发消息。

你看行么?

===============================================

比起上面这个方法,我更赞同

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

周期可以缩短

无论你是什么服务器 线程达到一定数量结果是什么应该不用说了吧 采用上面的方法,除非在你确认用户量很小,

==========================

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

此方法绝对不可用,


用户量是比较大的情况,要怎么解决,这是一个移动的项目,可能有较大的用户量和并发数。


我觉得在数据库里加一个字段,启动一个单一独立的线程来操作,还是可以做到的。期待有更好的办法。


我又想到了一个新的方案,提出来问一下大像可行不:
短信上行,就像一个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("回答超时");

}

}




没人啊,,结帐了,算了,,谢谢各位了!!!


↑返回目录
前一篇: 50分求答案!!!怎样取得文件夹下的所有文件,包括子目录中的文件
后一篇: 请了解或有电信计费帐务系统经验的朋友谈谈!!