成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

4.1、異步請求處理(TODO)

AbnerMing / 2490人閱讀

摘要:本部分示例見這個項目的分支下的中引進了基于異步請求處理的。同時主容器線程退出釋放并允許處理其他請求。對的調(diào)用返回,可以被用于異步處理之上的進一步控制。

??本部分示例見這個項目的 mvc 分支下的 AsyncController.java

??Spring MVC 3.2 中引進了基于異步請求處理的 Servlet 3。除了返回一個值,一個控制器方法現(xiàn)在可以返回一個java.util.concurrent.Callable并生產(chǎn)來自 Spring MVC 管理的線程的返回值。同時主 Servlet 容器線程退出、釋放并允許處理其他請求。Spring MVC 在 TaskExecutor 的幫助下,在一個獨立的線程中調(diào)用 Callable,當 Callable 返回時,請求被發(fā)回 Servlet 容器,使用 Callable 的返回值繼續(xù)執(zhí)行。這里有一個這樣的控制器方法的例子:

@PostMapping
public Callable processUpload(final MultipartFile file) 
{
    return new Callable() 
    {
        public String call() throws Exception 
        {
            // ...
            return "someView";
        }
    };
}

??這個控制器方法的另一個選擇是返回一個DeferredResult實例。這種情況下,返回值可以由任何線程產(chǎn)生,比如一個沒有被 Spring MVC 管理的線程。比如,結(jié)果可能產(chǎn)生于外部事件的響應(yīng),比如一個 JMS 消息,一個定時任務(wù)等。這里有一個這樣的控制器方法的例子:

@RequestMapping("/quotes")
@ResponseBody
public DeferredResult quotes() 
{
    DeferredResult deferredResult = new DeferredResult();
    // Save the deferredResult somewhere..
    return deferredResult;
}

// In some other thread...
deferredResult.setResult(data);

??如果沒有任何對 Servlet 3.0 中異步請求處理特性的了解的話,這可能很難理解。去了解一下會很有幫助。這里列出幾個這個機制的基本事實:

通過request.startAsync()調(diào)用,一個 ServletRequest 可以被置為異步模式。這么做的主要影響是,Servlet,以及任何 Filter,可以退出,但是響應(yīng)依舊會保持開放來允許之后完成處理過程。

request.startAsync()的調(diào)用返回 AsyncContext,AsyncContext 可以被用于異步處理之上的進一步控制。比如它提供了方法調(diào)度功能,這很像 Servlet API 中的 forward,但是它允許應(yīng)用程序繼續(xù)在 Servlet 容器線程中進行請求處理。

ServletRequest 提供對當前 DispatcherType 的訪問,DispatcherType 可以用于區(qū)別處理初始化請求、異步調(diào)度、forward 和其他調(diào)度器(dispatcher)類型。

??有了上面的意識,下面是用于帶有 Callable 的異步請求處理的事件序列:

控制器返回一個 Callable

Spring MVC 開始異步處理,并把 Callable 提交給一個 TaskExecutor 用于在一個多帶帶的線程中處理

DispatcherServlet 和所有的 Filter 退出 Servlet 容器線程,但是響應(yīng)保持打開

這個 Callable 產(chǎn)生一個結(jié)果,Spring MVC 把這個請求調(diào)回 Servlet 容器繼續(xù)處理

DispatcherServlet 繼續(xù)執(zhí)行,并繼續(xù)處理來自 Callable 的異步產(chǎn)生的結(jié)果

??DeferredResult 的事件序列很相似,除了它應(yīng)該由應(yīng)用程序從任何線程中來產(chǎn)生異步結(jié)果:

控制器返回一個 DeferredResult,并把它保存在內(nèi)存中的隊列或者列表中用于訪問

Spring MVC 開始異步處理

DispatcherServlet 和所有配置的 Filter 退出請求處理線程,但是響應(yīng)依舊打開

應(yīng)用程序設(shè)置來自一些線程中的 DeferredResult,Spring MVC 把請求調(diào)回 Servlet 容器

DispatcherServlet 再次被調(diào)用,并繼續(xù)處理異步產(chǎn)生的結(jié)果

??要了解更多使用異步請求處理的動機的背景,以及什么時候或為什么使用它,請讀這個博客文章系列.

因為所學有限,這一部分并沒有真正完成。這里先占坑,日后再行補充。

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/66082.html

相關(guān)文章

  • Vert.x Blueprint 系列教程(一) | 待辦事項服務(wù)開發(fā)教程

    摘要:本文章是藍圖系列的第一篇教程。是事件驅(qū)動的,同時也是非阻塞的。是一組負責分發(fā)和處理事件的線程。注意,我們絕對不能去阻塞線程,否則事件的處理過程會被阻塞,我們的應(yīng)用就失去了響應(yīng)能力。每個負責處理請求并且寫入回應(yīng)結(jié)果。 本文章是 Vert.x 藍圖系列 的第一篇教程。全系列: Vert.x Blueprint 系列教程(一) | 待辦事項服務(wù)開發(fā)教程 Vert.x Blueprint 系...

    frank_fun 評論0 收藏0
  • Vuex、Flux、Redux、Redux-saga、Dva、MobX

    摘要:也就是說不應(yīng)該有公開的,所有都應(yīng)該是私有的,只能有公開的。允許使用方法設(shè)置監(jiān)聽函數(shù),一旦發(fā)生變化,就自動執(zhí)行這個函數(shù)。用一個叫做的純函數(shù)來處理事件??梢酝ㄟ^得到當前狀態(tài)。在中,同步的表現(xiàn)就是發(fā)出以后,立即算出。 這篇文章試著聊明白這一堆看起來挺復雜的東西。在聊之前,大家要始終記得一句話:一切前端概念,都是紙老虎。 不管是Vue,還是 React,都需要管理狀態(tài)(state),比如組件之...

    hiYoHoo 評論0 收藏0
  • Dart基礎(chǔ)系統(tǒng)學習

    摘要:中所有的基礎(chǔ)類型類等都繼承,默認值是,自帶和,而如果是或者的話,那么它只有一個方法。斷言失敗則程序立刻終止檢查是否為空字符串檢查是否小于等于檢查是否為檢查是否為字符串中,支持類型。類繼承類,通過關(guān)鍵字調(diào)用類的構(gòu)造函數(shù)。泛型全面支持泛型。 目錄介紹 01.變量聲明 1.1 var聲明變量 1.2 變量和常量 1.3 dynamic和Object 02.數(shù)據(jù)類型 2.1 基本...

    stackvoid 評論0 收藏0
  • [email protected]更新內(nèi)置錯誤處機制,F(xiàn)undebug同步支持相應(yīng)錯誤監(jiān)控

    摘要:摘要的錯誤監(jiān)控插件同步支持異步錯誤監(jiān)控。此次更新,我們對的監(jiān)控插件做了相應(yīng)的更新,來更好地支持使用框架開發(fā)的應(yīng)用錯誤的監(jiān)控。程序運行后,成功捕獲該錯誤總結(jié)更新到,對錯誤處理提供了更加強大的支持。 摘要: Fundebug 的 JavaScript 錯誤監(jiān)控插件同步支持 Vue.js 異步錯誤監(jiān)控。 Vue.js 從誕生至今已經(jīng) 5 年,尤大在今年 2 月份發(fā)布了重大更新,即Vue 2....

    DC_er 評論0 收藏0
  • AJAX 簡單講解

    摘要:提供一系列新事件,在中我們一般只應(yīng)用,然后檢查狀態(tài)值再決定下一步操作,提供回調(diào)函數(shù)簡化了這一步驟,在接收完數(shù)據(jù)的時候即可觸發(fā)。的事件的回調(diào)函數(shù)的事件參數(shù)有兩個重要屬性和,用來計算百分值。不具備對象及其事件方法。 AJAX(Asynchronous Javascript And XML:異步JavaScript和XML) AJAX 已經(jīng)是老生常談的話題了,它最早起源于1997年,由 Mi...

    eccozhou 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<