记录一下jetty的异步请求
nutz加jetty 的测试代码
@At
@Ok("void") //不要视图啊... 因为多次进入
@Fail("void")// 一样不需要...
public void async(final @Param("wait")long wait, @Attr("obj")Object obj, final HttpServletRequest req) {
System.out.println("async IN");
if (obj == null) { // 第一次进入时,必然是null, 第二次,如果是线程唤醒的,那就有值了,呵呵
System.out.println("OBJ NULL");
// 获取这个关键的对象,哈哈哈
final Continuation continuation = ContinuationSupport.getContinuation(req);
if (continuation.isExpired()) { // 往下的代码设置了超时,so,这样判断一下咯
System.out.println("async TIMEOUT");
return;
}
continuation.setTimeout(15*1000); //设置超时哦
continuation.suspend(); // 非阻塞的方法... 仅仅是设置一个状态
new Thread() { //我在这启动一个线程,休眠一定时间之后唤醒这个异步请求
public void run() {
System.out.println("async Thread Start");
if (wait < 1) {
Lang.quiteSleep(10 * 1000);
} else {
Lang.quiteSleep(wait * 1000);
}
System.out.println("async Thread wakeup");
req.setAttribute("obj", "I do it!");
continuation.resume();
};
}.start();
} else {
System.out.println("async GET OBJ --> " + obj);
}
System.out.println("async OUT");
}
简单来说,就是多次进入入口方法.通过
blog comments powered by Disqus