Python 官方文档:入门教程 => 点击学习
目录1. 背景2. Servlet同步请求3. Servlet异步请求4. 异步Servlet使用方法5. spring中的实现例子附:异步对象监听器总结1. 背景 在研究长轮询的实
在研究长轮询的实现过程,有使用到Servlet3的异步请求。下面就来学习一下Servlet3的异步请求
现在Servlet的版本已经到了5
正常情况下请求模型和上面的模型一样,所有的请求交给Tomcat服务器的线程池处理,整个动作处理完成才释放回线程池。
这里就存在了一个问题如果后期的业务处理时间比较长。那么处理请求的线程就会被一直占用。当请求越来越多被占用的线程也会越来越多。直到被耗尽线程池中所有的线程。后续进来的就一直被阻塞等待线程来处理。
当用户不关心提交的返回可以定义业务处理线程池,前端请求提交后,Tomcat线程将处理提交给业务线程池立即返回。Spring 中的异步任务(@Async)就是这样的。
同样以Tomcat服务为例:
引入异步Servlet3整体流程:
使用异步 Servelt,Tomcat 线程仅仅处理请求解析动作,所有耗时较长的业务操作全部交给业务线程池,所以相比同步请求, Tomcat 线程可以处理 更多请求。虽然将业务交给了业务流程处理,但是前端还在等待结果返回(同步等待返回)。
异步处理,前端会同步等待结果返回。很多人会觉得异步请求会返回更快。其实不然由于异步存在线程的切换。所有返回时间会比同步的慢。
虽然没有降低相应时间但是还是有其他明显的优点:
使用异步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 {
}
});
到此这篇关于Java Servlet异步请求开启的文章就介绍到这了,更多相关Servlet异步请求开启内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!
--结束END--
本文标题: Java Servlet异步请求开启的简单步骤
本文链接: https://lsjlt.com/news/138185.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
2024-03-01
2024-03-01
2024-03-01
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0