AsyncContext异步请求的用法

简介: AsyncContext异步请求的用法

AsyncContext介绍

Servlet 3.0的异步处理支持特性,使Servlet 线程不再需要一直阻塞,直到业务处理完毕才能再输出响应,最后才结束该 Servlet 线程。在接收到请求之后,Servlet 线程可以将耗时的操作委派给另一个线程来完成,自己在不生成响应的情况下返回至容器。针对业务处理较耗时的情况,这将大大减少服务器资源的占用,并且提高并发处理速度

Servlet 3.0新增了异步处理,可以先释放容器分配给请求的线程与相关资源,减轻系统负担,原先释放了容器所分配线程的请求,其响应将被延后,可以在处理完成(例如长时间运算完成、所需资源已获得)时再对客户端进行响应。


在Servlet 3.0中,在ServletRequest上提供了startAsync()方法


image.png

image.png

1.startAsync()会直接利用原有的请求与响应对象来创建AsyncContext

2.startAsync(ServletRequest request,ServletResponse response)可以传入自行创建的请求、响应封装对象;


可以通过AsyncContext的getRequest()、getResponse()方法取得请求、响应对象,此次对客户端的响应将暂缓至调用AsyncContext的complete()或dispatch()方法为止,前者表示响应完成,后者表示将调派指定的URL进行响应。


AsyncContext使用场景

例如在Nacos中; 客户端想服务端发起请求获取是否有变更的配置数据,如果没有的话,等待三十秒再返回;(主要是Nacos在这30秒内,这时配置变更了,则立马返回响应变更数据); 那这时候就可以使用AsyncContext这个对象了

image.png

代码中得到AsyncContext实例之后,就会先释放容器分配给请求的线程与相关资源,然后把把实例放入了一个定时任务里面;等时间到了或者有配置变更之后,调用complete()响应完成

image.png



相关文章
|
4月前
|
前端开发 JavaScript 定位技术
JavaScript 等待异步请求数据返回值后,继续执行代码 —— async await Promise的使用方法
JavaScript 等待异步请求数据返回值后,继续执行代码 —— async await Promise的使用方法
54 1
|
5月前
|
JSON 前端开发 JavaScript
前端Ajax、Axios和Fetch的用法和区别笔记
前端Ajax、Axios和Fetch的用法和区别笔记
91 2
|
6月前
|
前端开发 JavaScript
使用promise解决异步请求的用法
使用promise解决异步请求的用法
89 0
|
前端开发 JavaScript API
Promise封装Ajax请求
Promise封装Ajax请求
54 0
|
前端开发 JavaScript
AJAX: 事件循环(举例细论)
AJAX: 事件循环(举例细论)
60 1
Ajax-cookie用法及封装
Ajax-cookie用法及封装
144 12
Ajax-cookie用法及封装
|
移动开发 前端开发 JavaScript
封装自己的Ajax函数
封装自己的Ajax函数
92 0
封装自己的Ajax函数
|
JSON 前端开发 数据格式
ES6中 Promise 概念、基本用法和封装ajax(json数据使用)
Promise是异步编程的一种解决方案,可以替代传统的解决方案--回调函数和事件。ES6统一了用法,并原生提供了Promise对象。
202 0
|
前端开发 小程序 JavaScript
promise-基础-ajax封装
总结前后端交互的几种方式的时候,突然想起来之前小程序用promise封装ajax,简要记录如下 这几天闲来无事又梳理了下 promise
211 0