【问题标题】:jetty 7 continuations码头 7 续集
【发布时间】:2011-08-30 11:03:53
【问题描述】:

我正在使用 jetty-7.4.1.v20110513 和 servlet-api-2.5

我尝试在以下 servlet 中使用延续。

 import java.io.*;
 import java.util.*;
 import javax.servlet.ServletException;
 import javax.servlet.http.HttpServlet;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;

 import org.eclipse.jetty.continuation.*;



public class cs extends HttpServlet {

public void service(HttpServletRequest req, HttpServletResponse res)
throws java.io.IOException {

String reqId = req.getParameter("id");

Continuation cc = ContinuationSupport.getContinuation(req);

res.setContentType("text/plain");
res.getWriter().println("Request: "+reqId+"\tstart:\t"+new Date());
res.getWriter().flush();

cc.setTimeout(2000);
cc.suspend();

res.getWriter().println("Request: "+reqId+"\tend:\t"+new Date());
cc.complete();
}
}

我预计会有 2 秒的延迟,但是当我从浏览器运行 servlet 时,我会毫无延迟地得到如下输出:

Request: null   start:  Sat May 21 15:25:02 IST 2011
Request: null   end:    Sat May 21 15:25:02 IST 2011

【问题讨论】:

    标签: java jetty continuations


    【解决方案1】:

    我终于弄明白了 continuation api。以下代码对我有用。感谢您的支持。

    import java.io.*;
    import java.util.*;
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    import org.eclipse.jetty.continuation.*;
    
    public class cs extends HttpServlet {
    
      public void doGet(HttpServletRequest req, HttpServletResponse res)
          throws java.io.IOException {
    
        String reqId = req.getParameter("id");
    
        Continuation cc = ContinuationSupport.getContinuation(req);
    
        res.setContentType("text/plain");
        res.getWriter().println("Request: " + reqId + "\tstart:\t" + new Date());
        res.getWriter().flush();
    
        cc.setTimeout(2000);
        cc.suspend();
    
        res.getWriter().println("Request: " + reqId + "\tend:\t" + new Date());
        if (cc.isInitial() != true) {
          cc.complete();
        }
      }
    }
    

    输出:

    Request: null   start:  Sat May 21 15:25:02 IST 2011
    Request: null   end:    Sat May 21 15:25:02 IST 2011
    Request: null   start:  Sat May 21 15:25:04 IST 2011
    Request: null   end:    Sat May 21 15:25:04 IST 2011
    

    【讨论】:

      【解决方案2】:

      我想你正在阅读这个tutorial。使用以下方法之一可以实现 2 秒延迟:

      • 在第二个res.getWriter().println()之前添加Thread.sleep(2000)

      • 或删除Continuation.complete() 调用,这将使继续等待Continuation.setTimeout() 中指定的最长时间。现在发生的情况是您立即通知您“计算”已完成(通过调用cc.complete()

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-08-06
        • 2011-01-27
        • 1970-01-01
        • 2019-01-05
        • 2018-01-20
        • 2020-06-14
        相关资源
        最近更新 更多