欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java?Servlet異步請(qǐng)求開啟的簡(jiǎn)單步驟

 更新時(shí)間:2022年02月06日 11:55:40   作者:螞蟻背大象  
Java servlet是大家公認(rèn)的服務(wù)器端web技術(shù)的標(biāo)準(zhǔn),包括jsp,jsf,和大量的web框架,soap,RESTful web service api,還有新聞供應(yīng),下面這篇文章主要給大家介紹了關(guān)于Java?Servlet異步請(qǐng)求開啟的簡(jiǎn)單步驟,需要的朋友可以參考下

1. 背景

在研究長(zhǎng)輪詢的實(shí)現(xiàn)過程,有使用到Servlet3的異步請(qǐng)求。下面就來學(xué)習(xí)一下Servlet3的異步請(qǐng)求

現(xiàn)在Servlet的版本已經(jīng)到了5

2. Servlet同步請(qǐng)求

以Tomcat服務(wù)器為例:

  • Http請(qǐng)求到達(dá)Tomcat
  • Tomcat從線程池中取出線程處理到達(dá)Tomcat的請(qǐng)求
  • 將請(qǐng)求Http解析為HttpServletRequest
  • 分發(fā)到具體Servlet處理對(duì)應(yīng)的業(yè)務(wù)
  • 通過HttpServletResponse返回處理的數(shù)據(jù)

正常情況下請(qǐng)求模型和上面的模型一樣,所有的請(qǐng)求交給Tomcat服務(wù)器的線程池處理,整個(gè)動(dòng)作處理完成才釋放回線程池。
這里就存在了一個(gè)問題如果后期的業(yè)務(wù)處理時(shí)間比較長(zhǎng)。那么處理請(qǐng)求的線程就會(huì)被一直占用。當(dāng)請(qǐng)求越來越多被占用的線程也會(huì)越來越多。直到被耗盡線程池中所有的線程。后續(xù)進(jìn)來的就一直被阻塞等待線程來處理。

當(dāng)用戶不關(guān)心提交的返回可以定義業(yè)務(wù)處理線程池,前端請(qǐng)求提交后,Tomcat線程將處理提交給業(yè)務(wù)線程池立即返回。Spring 中的異步任務(wù)(@Async)就是這樣的。

3. Servlet異步請(qǐng)求

同樣以Tomcat服務(wù)為例:

  • 將請(qǐng)求Http解析為HttpServletRequest
  • 分發(fā)到具體Servlet處理,將業(yè)務(wù)提交給自定義業(yè)務(wù)線程池,Tomcat線程立刻被釋放。
  • 當(dāng)業(yè)務(wù)線程將任務(wù)執(zhí)行結(jié)束,將會(huì)將結(jié)果轉(zhuǎn)交給Tomcat線程池。
  • 通過HttpServletResponse返回處理的數(shù)據(jù)

引入異步Servlet3整體流程:

使用異步 Servelt,Tomcat 線程僅僅處理請(qǐng)求解析動(dòng)作,所有耗時(shí)較長(zhǎng)的業(yè)務(wù)操作全部交給業(yè)務(wù)線程池,所以相比同步請(qǐng)求, Tomcat 線程可以處理 更多請(qǐng)求。雖然將業(yè)務(wù)交給了業(yè)務(wù)流程處理,但是前端還在等待結(jié)果返回(同步等待返回)。

異步處理,前端會(huì)同步等待結(jié)果返回。很多人會(huì)覺得異步請(qǐng)求會(huì)返回更快。其實(shí)不然由于異步存在線程的切換。所有返回時(shí)間會(huì)比同步的慢。

雖然沒有降低相應(yīng)時(shí)間但是還是有其他明顯的優(yōu)點(diǎn):

  • 可以處理更高并發(fā)連接數(shù),提高系統(tǒng)整體吞吐量
  • 請(qǐng)求解析與業(yè)務(wù)處理完全分離,職責(zé)單一
  • 自定義業(yè)務(wù)線程池,我們可以更容易對(duì)其監(jiān)控,降級(jí)等處理
  • 可以根據(jù)不同業(yè)務(wù),自定義不同線程池,相互隔離,不用互相影響

4. 異步Servlet使用方法

使用異步Servlet只需要三步:

  • HttpServletRequest#startAsync() 獲取 AsyncContext 異步上下文
  • 使用自定義業(yè)務(wù)線程池處理業(yè)務(wù)
  • AsyncContext#getResponse() 返回處理結(jié)果給前端,然后調(diào)用 AsyncContext#complete()

5. Spring中的實(shí)現(xiàn)例子

代碼如下圖:

  • 開啟異步Servlet
  • 模擬業(yè)務(wù)執(zhí)行
  • 返回結(jié)果給前端

前面有說過前端是一直在同步等待的我們通過運(yùn)行代碼來驗(yàn)證一下。結(jié)果如下圖:

代碼地址:github.com/mxsm/spring…

附:異步對(duì)象監(jiān)聽器

在異步對(duì)象完成、超時(shí)、錯(cuò)誤或者開始時(shí)監(jiān)聽

        //獲取異步上下文對(duì)象
        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 {

            }
        });

總結(jié)

到此這篇關(guān)于Java Servlet異步請(qǐng)求開啟的文章就介紹到這了,更多相關(guān)Servlet異步請(qǐng)求開啟內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java基礎(chǔ)知識(shí)之I/O流和File類文件操作

    Java基礎(chǔ)知識(shí)之I/O流和File類文件操作

    眾所周知java語言提供給程序員非常多的包供編程時(shí)使用,方便又快捷,下面這篇文章主要給大家介紹了關(guān)于Java基礎(chǔ)知識(shí)之I/O流和File類文件操作的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-04-04
  • Java JDK11的下載與安裝教程

    Java JDK11的下載與安裝教程

    這篇文章主要介紹了Java JDK11的下載與安裝,本文以win10為例給大家講解win10系統(tǒng)下載安裝jdk11的教程,需要的朋友可以參考下
    2023-05-05
  • 詳解Java的Spring框架中bean的注入集合

    詳解Java的Spring框架中bean的注入集合

    這篇文章主要介紹了詳解Java的Spring框架中bean的注入集合,Spring是Java的SSH三大web開發(fā)框架之一,需要的朋友可以參考下
    2015-12-12
  • SpringBoot2.X整合Spring-Cache緩存開發(fā)的實(shí)現(xiàn)

    SpringBoot2.X整合Spring-Cache緩存開發(fā)的實(shí)現(xiàn)

    本文主要介紹了SpringBoot2.X整合Spring-Cache緩存開發(fā)的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-07-07
  • Java SE使用數(shù)組實(shí)現(xiàn)高速數(shù)字轉(zhuǎn)換功能

    Java SE使用數(shù)組實(shí)現(xiàn)高速數(shù)字轉(zhuǎn)換功能

    隨著大數(shù)據(jù)時(shí)代的到來,數(shù)字轉(zhuǎn)換功能變得越來越重要,在Java開發(fā)中,數(shù)字轉(zhuǎn)換功能也是經(jīng)常用到的,下面我們就來學(xué)習(xí)一下如何使用Java SE數(shù)組實(shí)現(xiàn)高速的數(shù)字轉(zhuǎn)換功能吧
    2023-11-11
  • Java獲取項(xiàng)目路徑方式System.getProperty(“user.dir“)

    Java獲取項(xiàng)目路徑方式System.getProperty(“user.dir“)

    這篇文章主要介紹了Java獲取項(xiàng)目路徑方式System.getProperty(“user.dir“),具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • Java函數(shù)式編程(八):字符串及方法引用

    Java函數(shù)式編程(八):字符串及方法引用

    這篇文章主要介紹了Java函數(shù)式編程(八):字符串及方法引用,本文是系列文章的第8篇,其它文章請(qǐng)參閱本文底部的相關(guān)文章,需要的朋友可以參考下
    2014-09-09
  • shiro與spring?security用自定義異常處理401錯(cuò)誤

    shiro與spring?security用自定義異常處理401錯(cuò)誤

    這篇文章主要介紹了shiro與spring?security用自定義異常處理401錯(cuò)誤,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • JAVA WEB中Servlet和Servlet容器的區(qū)別

    JAVA WEB中Servlet和Servlet容器的區(qū)別

    這篇文章主要介紹了JAVA WEB中Servlet和Servlet容器的區(qū)別,文中示例代碼非常詳細(xì),供大家參考和學(xué)習(xí),感興趣的朋友可以了解下
    2020-06-06
  • 深入淺析SpringBoot自動(dòng)配置原理

    深入淺析SpringBoot自動(dòng)配置原理

    本文給大家介紹SpringBoot自動(dòng)配置原理解析,springboot使用的是2.3.1版本源碼,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2021-10-10

最新評(píng)論