今天我發現了Servlet 3.0的異步設施。我已經讀過它並認爲我理解了這個概念。Grails - Servlet 3.0異步請求處理
我想知道:這會對「標準」控制器的操作產生什麼影響,還是應該將它保存爲使用Web服務或廣泛的計算過程?
換句話說,在所有控制器的操作中使用它,在事先沒有考慮動作方法的計算時間的情況下使用它是不是一個好主意? 如果是這樣,你能向我解釋爲什麼?
預先感謝您。
今天我發現了Servlet 3.0的異步設施。我已經讀過它並認爲我理解了這個概念。Grails - Servlet 3.0異步請求處理
我想知道:這會對「標準」控制器的操作產生什麼影響,還是應該將它保存爲使用Web服務或廣泛的計算過程?
換句話說,在所有控制器的操作中使用它,在事先沒有考慮動作方法的計算時間的情況下使用它是不是一個好主意? 如果是這樣,你能向我解釋爲什麼?
預先感謝您。
不,這將是一個壞主意。
在控制器操作上,您會收到一個請求,並且希望儘快提供響應。您只能將該異步用於可能會延遲的事情。
如果用戶在您的網站上請求某個頁面,則無法用空白頁面進行響應,然後再推回來更新其頁面。我只會將此功能用於AJAX請求,甚至不適用於所有這些功能。你必須決定什麼是有意義的運行異步運行,哪些不運行。
你應該閱讀的Grails文檔Asynchronous Request Handling
一般爲快速執行有在異步處理請求毫無益處控制器動作。但是,對於長時間運行的控制器操作,這是非常有益的
原因是,對於異步/非阻塞響應,一個線程==一個請求==一個響應關係被破壞。容器可以保持客戶端響應處於打開狀態並處於活動狀態,同時將線程返回到容器以處理另一個請求,從而提高可伸縮性。
希望這應該足夠清楚,但請問是否有什麼不清楚。
大多數流行的Java Web容器可以同時處理多個請求嗎?也就是說,如果一個請求阻塞了,是否會將所有將來的請求放入一個隊列中,直到原始請求結束?對我而言,這將是使用ayncs的主要原因:釋放服務器。 – duma 2013-06-02 19:49:15