Java服务器端技术|Tomcat servlet3的异步化原理理解

Servlet3.0 异步处理
Servlet3.1 非阻塞IO
转:https://blog.csdn.net/zhurhyme/article/details/76228836
https://www.cnblogs.com/davenkin/p/async-servlet.html
tomcat如何处理请求
从客户端发出一次请求至tomcat容器大致经过如下过程:

  1. 客户端发出http请求至tomcat的连接监听端口;
  2. tomcat connector接收线程接收请求,并根据http协议解析该次请求;
  3. tomcat 通过解析的http报文,初始化org.apache.coyote.Request,并实例化org.apache.coyote.Response;
  4. 经装饰模式转化为servlet api对应的HttpServletRequest与HttpServletReponse;
  5. 经tomcat的层层容器engine,host,context最终到过我们所写的业务servlet的service方法;
  6. 业务方法service,处理相关的业务逻辑,写入相应的响应的至response,并返回tomat的容器组件;
  7. tomcat该处理线程关闭响应流Response并将响应内容返回客户端;
  8. tomcat该处理线程被释放,然后用于下次请求的处理;
【Java服务器端技术|Tomcat servlet3的异步化原理理解】所以tomat结合servlet3异步化的整体请求处理过程大致如下:
  1. 客户端发出http请求至tomcat的连接监听端口;
  2. tomcat connector接收线程接收请求,并根据http协议解析该次请求;
  3. tomcat 通过解析的http报文,实例化org.apache.coyote.Request,并实例化org.apache.coyote.Response;
  4. 经装饰模式转化为servlet api对应的HttpServletRequest与HttpServletReponse;
  5. 经tomcat的层层容器engine,host,context最终到过我们所写的业务servlet的service方法;
  6. 业务方法开启异步化上下文AsynContext; 释放tomcat当前处理线程;
  7. tomcat判断当前请求是否开启了异步化,如果开启则不关闭响应流Response,也不进行用户响应的返回;
  8. tomcat该线程被释放,然后用于下次请求的处理,提高其吞吐量;
  9. 业务方法在AsynContext环境中完成业务方法的处理,调用其complete方法,将响应写回响应流,并关闭响应流,完成此次请求处理.
package davenkin.servlet;
import javax.servlet.AsyncContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet(value = "https://www.it610.com/simpleAsync", asyncSupported = true)
public class SimpleAsyncHelloServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
AsyncContext asyncContext = request.startAsync();
asyncContext.start(() -> {
new LongRunningProcess().run();
try {
asyncContext.getResponse().getWriter().write("Hello World!");
} catch (IOException e) {
e.printStackTrace();
}
asyncContext.complete();
});
}
}

    推荐阅读