异步Servlet

1. 异步操作

应用服务器中的Web容器通常对每个客户机请求使用一个服务器线程。在高负载条件下,容器需要大量线程来服务所有客户机请求。可伸缩性限制包括内存耗尽或耗尽容器线程池。要创建可伸缩的web应用程序,您必须确保与请求相关的线程没有闲置,以便容器可以使用它们来处理新请求。

Servlet 3.0引入了异步处理,然后在Servlet 3.1中又引入了非阻塞IO来进一步增强异步处理的性能。如果servlet或过滤器在处理请求时遇到潜在的阻塞操作,它可以将该操作分配给异步执行上下文,并立即将与该请求关联的线程返回给容器,而不生成响应。阻塞操作在异步执行上下文中的不同线程中完成,该线程可以生成响应或将请求分派给另一个servlet。

异步操作事例图如下:

 2. 事例

@WebServlet(urlPatterns = "/asyncTest", asyncSupported = true)
public class AsyncServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String time = req.getParameter("time");
        AsyncContext asyncContext = req.startAsync(req, resp);
        asyncContext.setTimeout(3000);
        asyncContext.start(() -> {
            // 模拟耗时操作
         
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值