由於支持Servlet 3.0 asynchronous processing。總是使用異步處理會更好嗎?或者在什麼情況下同步處理更好?異步Servlets與同步Servlets
回答
您使用異步servlet獲得的最大成果是HTTP push,其中服務器可以在客戶端選擇時將信息發回客戶端,而不是在客戶端請求時發回客戶端。前期非同步的servlet,這需要長時間運行的HTTP連接,每個捆綁的服務器線程,這是非常低效的。這種新的模式,從連接控制解耦服務器端處理。
異步處理已經推出了針對案件時,有沒有必要在整個請求處理週期中保持一個線程。這種情況的典型例子是類似comet的功能。
在任何情況下也不會一文不值使用異步處理,因爲通常後端處理消耗線程反正。
閱讀文章,Servlet 3.0規範中的異步處理支持有一個非常特殊的用例 - 它被設計用來處理這種情況,即您有一個AJAX應用程序,該應用程序可以在後臺觸發潛在的長時間運行的進程。
我們需要類似這樣的原因是爲了響應thread-per-request模型中的一個問題,該模型在客戶端每次從服務器請求頁面時分配一個線程,而不是爲客戶端分配單個線程整個會議。這在AJAX之前很有效,當客戶端會偶爾發出請求時,但是當AJAX應用程序顯着增加客戶端請求的數量時,好處就會丟失。
特別是,如果一個AJAX請求觸發潛在的緩慢或堵塞的東西,如數據庫操作,我們又回到了起點 - 從服務器的線程池線程都可能處於閒置狀態。
支持異步處理嘗試通過將請求集中到一個隊列,使得線程不總是卡在等待過程中可能沒有甚至尚未開始請求進行處理的結果,以減輕這一點。簡而言之,我們正試圖讓我們的時間在任何時候都不受歡迎 - 也就是說,減少閒置時間(但可以爲其他連接提供服務)。
就像任何新的進展,這是不能被用作一個尺寸適合所有工具的東西。在適當的地方查找應用程序中的特定情況。
+1「閱讀文章...」 – user359996 2010-10-14 04:20:40
我剛剛瀏覽了鏈接的文章,這是服務器端的改進,而不是客戶端的異步。
總結的文章:
您可能需要使用異步的servlet的情況下,你有請求進來(類似於撲與AJAX請求您的服務器)的負荷,而你不想服務每請求一個線程。在這種情況下,當處理時間需要一點時間時,TPR可能會很危險,導致您耗盡線程池。
作業將卡住成一個作業隊列,直到作業完成和響應最終提交時的資源釋放,使其能夠完成線程可以退休了。
很酷的東西。
其基於requrirement其中任何機會的某個線程這種情況ü應以其它方式使用異步Servlet的不東陽我們不能讓這麼多線程
得到空閒狀態。如果一個servlet或過濾器達到一個潛在的在處理請求時可以阻止操作,它可以將操作分配給異步執行上下文,並立即將與請求關聯的線程返回給容器,而不會生成響應。阻塞操作在另一個線程的異步執行上下文中完成,該線程可以生成響應或將請求分派給另一個servlet。
要在一個servlet啓用異步處理,設置asyncSupported爲true @WebServlet標註的參數如下:
@WebServlet(URL模式= { 「/ asyncservlet」},asyncSupported =真) 公共類AsyncServlet擴展HttpServlet {...}
同步(經典Web應用程序模型) 同步請求阻止客戶端,直到操作完成,即瀏覽器不反應。在這種情況下,瀏覽器的Java腳本引擎被阻止。
異步(AJAX Web應用程序模型) 異步請求不會阻止客戶端,即瀏覽器響應。此時,用戶也可以執行其他操作。在這種情況下,瀏覽器的Java腳本引擎不會被阻止。
在同步通信中都是激活的,在其中,如在異步無需活性同時例如異步指消息有阻塞操作到一個新的線程和運行相關聯的在容器上的螺紋的同時
應用程序服務器中的Web容器通常每個客戶端請求使用一個服務器線程。在重負載條件下,容器需要大量線程來滿足所有客戶端請求。可伸縮性限制包括內存用盡或容器線程池耗盡。要創建可伸縮的Web應用程序,您必須確保沒有與請求關聯的線程閒置,因此容器可以使用它們來處理新的請求。
有兩種常見的情況,其中與請求關聯的線程可能處於空閒狀態。
The thread needs to wait for a resource to become available or process data before building the response. For example, an application may need to query a database or access data from a remote web service before generating the response.
The thread needs to wait for an event before generating the response. For example, an application may have to wait for a JMS message, new information from another client, or new data available in a queue before generating the response.
- 1. Guice 3.0與澤西島和異步Servlets
- 2. 與Servlets混淆
- 3. Java servlets在同步HTTP請求中返回JSON
- 4. NFS同步與異步
- 5. WCF同步與異步
- 6. 節點異步與同步
- 7. Servlets encodeRedirectURL
- 8. Servlets - 在多個Servlets中共享Initialcontext
- 9. EDT,異步,同步
- 10. 是在異步同步異步
- 11. 同步與異步邏輯 - SR-Flipflop
- 12. Passport.js異步與同步反序列化
- 13. 同步與異步iPhone上iPhone
- 14. 異步與同步Web服務實踐?
- 15. 異步Google廣告與同步
- 16. ASP.NET身份異步與同步問題
- 17. Javascript XMLHttpRequest Puzzler:異步與同步
- 18. AJAX請求同步與異步
- 19. 的iOS GCD同步與異步模塊
- 20. node.js與redis:同步還是異步?
- 21. 同步。每個與異步.ajax
- 22. 在node.js中與異步同步搏鬥
- 23. 與Tomcat servlets交互的類
- 24. Java監控:JMX與Servlets
- 25. 異步動作+同步DBQuery VS同步動作+異步DbQuery
- 26. 學習Java Servlets
- 27. Java中的servlets
- 28. 會話 - servlets
- 29. Servlets中的JSON
- 30. ProxyPass by servlets?
+1得到一個清晰的總結。 – BalusC 2010-01-29 15:37:25
如果您在服務器端檢查ajax數據並且用戶轉到其他網頁,會發生什麼情況?那麼現在他們不再需要這些數據了?或者如果用戶刷新頁面會發生什麼?現在在服務器端會有兩個實例檢查用戶的數據嗎? – gmustudent 2013-03-09 12:42:25