Servlet3.0新增异步Servlet,将Servlet线程和业务线程分离。
样例
worker线程执行业务逻辑:
1 |
|
收到一笔请求时日志输出:
1 |
|
(设定worker线程池大小为3的情况下)连续收到两笔请求时线程栈如下:
可见worker线程在AysncServlet下不是一直占用至Servlet结束,这样一个worker线程可以服务于多个请求。
另起业务线程执行业务逻辑:
1 |
|
AsyncContext
1 |
|
startAsync
javax.servlet.ServletRequest#startAsync()
setTimeout
start
complete
AsyncListner
1 |
|
Servlet 3.1提供的非阻塞IO能力
ReadListener
1 |
|
javax.servlet.ServletInputStream#isReady
curl --limit-rate 5k -F 'file=@bigfile' http://localhost:8080/async-read
1 |
|
WriteListener
1 |
|
javax.servlet.ServletOutputStream#isReady
curl --limit-rate 200k -o bigfile http://localhost:8080/async-write
1 |
|