分类分类
更新时间:2026-08-08 20:34:46作者:qazwsxzxc
1. 背景
在研究长轮询的实现过程,有使用到Servlet3的异步请求。下面就来学习一下Servlet3的异步请求
现在Servlet的版本已经到了5
2. Servlet同步请求
以Tomcat服务器为例:
Http请求到达Tomcat
Tomcat从线程池中取出线程处理到达Tomcat的请求
将请求Http解析为HttpServletRequest
分发到具体Servlet处理对应的业务
通过HttpServletResponse返回处理的数据

正常情况下请求模型和上面的模型一样,所有的请求交给Tomcat服务器的线程池处理,整个动作处理完成才释放回线程池。
这里就存在了一个问题如果后期的业务处理时间比较长。那么处理请求的线程就会被一直占用。当请求越来越多被占用的线程也会越来越多。直到被耗尽线程池中所有的线程。后续进来的就一直被阻塞等待线程来处理。
当用户不关心提交的返回可以定义业务处理线程池,前端请求提交后,Tomcat线程将处理提交给业务线程池立即返回。Spring 中的异步任务(@Async)就是这样的。
3. Servlet异步请求
同样以Tomcat服务为例:
将请求Http解析为HttpServletRequest
分发到具体Servlet处理,将业务提交给自定义业务线程池,Tomcat线程立刻被释放。
当业务线程将任务执行结束,将会将结果转交给Tomcat线程池。
通过HttpServletResponse返回处理的数据
引入异步Servlet3整体流程:

正常情况下请求模型和上面的模型一样,所有的请求交给Tomcat服务器的线程池处理,整个动作处理完成才释放回线程池。
这里就存在了一个问题如果后期的业务处理时间比较长。那么处理请求的线程就会被一直占用。当请求越来越多被占用的线程也会越来越多。直到被耗尽线程池中所有的线程。后续进来的就一直被阻塞等待线程来处理。
当用户不关心提交的返回可以定义业务处理线程池,前端请求提交后,Tomcat线程将处理提交给业务线程池立即返回。Spring 中的异步任务(@Async)就是这样的。
3. Servlet异步请求
同样以Tomcat服务为例:
将请求Http解析为HttpServletRequest
分发到具体Servlet处理,将业务提交给自定义业务线程池,Tomcat线程立刻被释放。
当业务线程将任务执行结束,将会将结果转交给Tomcat线程池。
通过HttpServletResponse返回处理的数据
引入异步Servlet3整体流程:

可以处理更高并发连接数,提高系统整体吞吐量
请求解析与业务处理完全分离,职责单一
自定义业务线程池,我们可以更容易对其监控,降级等处理
可以根据不同业务,自定义不同线程池,相互隔离,不用互相影响
4. 异步Servlet使用方法
使用异步Servlet只需要三步:
HttpServletRequest#startAsync() 获取 AsyncContext 异步上下文
使用自定义业务线程池处理业务
AsyncContext#getResponse() 返回处理结果给前端,然后调用 AsyncContext#complete()
5. Spring中的实现例子
代码如下图:

开启异步Servlet
模拟业务执行
返回结果给前端
前面有说过前端是一直在同步等待的我们通过运行代码来验证一下。结果如下图:

代码地址:github.com/mxsm/spring…
附:异步对象监听器
在异步对象完成、超时、错误或者开始时监听
//获取异步上下文对象
AsyncContext ac=req.startAsync();
ac.addListener(new AsyncListener() {
@Override
public void onComplete(AsyncEvent asyncEvent) throws IOException {
}
@Override
public void onTimeout(AsyncEvent asyncEvent) throws IOException {
}
@Override
public void onError(AsyncEvent asyncEvent) throws IOException {
}
@Override
public void onStartAsync(AsyncEvent asyncEvent) throws IOException {
}
});
相关
星球小队策略游戏316.49 MBv1.15.366.638912026-08-08
下载超市大亨3D经营养成253.14 MBv10.252026-08-08
下载绝世武林角色扮演453.09 MBv1.8.14162026-08-08
下载Crush Crush手机版经营养成124.86 Mv0.4482026-08-08
下载消消大亨经营养成13.56 Mv1.0.02026-08-08
下载endacopia手机版冒险游戏1.43Gv1.0.02026-08-08
下载最强帮主角色扮演143.91 MBv9991.12026-08-08
下载战西游手游折扣版策略游戏13.77 MBv1.02026-08-08
下载富豪物语创业时代官方版经营养成215.01 Mv3.0.12026-08-08
下载咒术回战爱憎乱斗手游动作射击291.7 Mv1.0.02026-08-08
下载三国吧兄弟折扣版策略游戏380.04 MBv1.0.02026-08-08
下载代号97动作射击277.47 Mv1.0.72026-08-08
下载










