Jetty使doPost成为异步

时间:2015-12-10 14:56:42

标签: java jetty

我们有一个长期工作的doPost方法,可以阻止Jetty线程

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    // ...
    // long prepare answer (which depends on external sources wait)
    // here must be something like yield

    PrintWriter out = response.getWriter();
    out.println(answer);
}

有没有办法异步进行长时间准备并在那里完成另一个Jetty任务?

2 个答案:

答案 0 :(得分:1)

您将要使用Servlet规范的2个功能。

  1. AsyncContext - Servlet规范的异步处理功能 - 允许您暂停活动处理,直到您实际拥有一些内容来生成响应。 (这是一个过度简化,但你得到了要点)
  2. HttpServletResponse.getOutputStream().setWriteListener(WriteListener) - Servlet规范的异步I / O特性 - 用于异步生成/写回客户端的响应。 (这也是一种简化,但是be aware of the gotchas when working with this

答案 1 :(得分:1)

您想使用Jetty的Continuation API。基本上,延续是一种机制,您可以以异步方式启动可能长时间运行的操作,然后释放处理当前请求的Jetty线程。异步操作完成后,使用continuation继续处理请求,此时您可以完成响应。见Continuation