Jetty6.0提供了AJAX的服務器端的推的技術,而且采用的是JAVA非阻塞的I/O,可以保證"Thousands of users can be served with hundreds of connections”,在學習DWR2的時候,也有類似服務器的推技術,對于這種技術是基于HTTP1.1的長連接進行的,但是網上關于這個方面的資料不是很多,僅僅從理論的角度進行講解,請教banq能否 通過一個簡單的技術模擬下這種服務器的長連接(并不是輪詢的方式),將服務器的數據推到客戶端,并且不占用當前的請求線程,他們的實現機制是如何的?目前僅僅有感性認識,主要問題是服務器如何得知需要更新的客戶。請bang詳細闡述一下,謝謝
jetty服務器這種長連接Continuations 其實不是真正的長連接,應該叫'connection freezing', or 'request parking' 連接暫停或請求暫停。
對于PUSH推機制:對于Jetty6其實還是依靠AJAX的客戶端主動請求的,改善的是:不需要AJAX客戶端不斷發出多次請求給服務器,以確定服務器端是否有響應。服務器端hold住ajax客戶端第一次請求,如果沒有業務結果,就不發出響應response,也就是說不關閉這次http連接,但是因為一個連接一個線程,你保持住一個請求就象保持一個線程一直運行,這是很浪費資源的。
傳統socket模式都是一個connection一個線程,NIO可以通過事件機制再觸發新線程,使得線程和請求可以分離,這樣, Jetty就是利用NIO這個機制,保持住請求request對象,釋放原來支持該請求的線程,讓線程返回線程池,這樣,如果業務處理有結果,Jetty就向客戶端發出響應,否則一直保持直至timeout失效。
這個機制如果證明可行,會加入servlet 3.0新規范,到時所有Jee服務器都有這個功能。
所以,這個機制不是嚴格意義上的推機制,但是也可以對付大量頻繁刷新請求,所以是一個改進。
至于推機制中服務器如何推,可以參考eda架構,這個是和我們平時做的JEE的SOA機制不太一樣,至于如何推,可以使用線程提醒 觀察者JDK 或JMS等等。
http://www.theserverside.com/news/thread.tss?thread_id=36594
http://docs.codehaus.org/display/JETTY/Continuations
Jetty
Jetty簡介
Jetty是一個開放源碼的HTTP服務器和Java serverlet容器。。
基本特色
相關鏈接
冰山上的播客
http://xinsync.xju.edu.cn/index.php/archives/category/prglang/java/jetty
posted on 2009-06-03 11:21
波 閱讀(762)
評論(0) 編輯 收藏