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

Published

2013-09-06

Categories


Tags

Fork me on GitHub