使用Ajax可以開發出基於瀏覽器的具有高使用者互動性和幾乎不易覺察到延遲的web應用。即時的動態資料比如新聞標題、證券報價和拍賣行情都需要儘快地發送給使用者。然而,AJAX仍然受限於web請求/響應架構的弱點,使得伺服器不能推送即時動態web資料。
Delft科技大學的EnginBozdag、AliMesbah和ArievanDeursen一起討論了下面這些可以實現基於web的即時事件通知的方法:
1.HTTP拉取方式:在這種傳統的方法中,用戶端以使用者可定義的時間間隔去檢查伺服器上的最新資料。這種拉取方式的頻率要足夠高才能保證很高的資料精確度,但高頻率可能會導致多餘的檢查,從而導致較高的網路流量。而另一方面,低頻率則會導致錯過更新的資料。理想地,拉取的時間間隔應該等於伺服器狀態改變的速度。
2.HTTP流:這種方法由存在於不間斷的HTTP串連響應中或某個XMLHttpRequest串連中的伺服器資料流所組成。
3.反轉AJAX:服務流應用到AJAX,就是所謂的反轉AJAX或者COMET。它使得伺服器在某事件發生時可以發送訊息給用戶端,而不需要用戶端顯式的請求。目標在於達到狀態變化的即時更新。COMET使用了HTTP/1.1中的持續串連的特性。通過HTTP/1.1,除非另作說明,伺服器和瀏覽器之間的TCP串連會一直保持串連狀態,直到其中一方發送了一條明顯的“關閉串連”的訊息,或者有逾時以及網路錯誤發生。
4.長時間輪詢:也就是所謂的非同步輪詢,這種方式是純伺服器端推送方式和用戶端拉取方式的混合。它是基於BAYEUX協議的。這個協議遵循基於主題的發布——訂閱機制。在訂閱了某個頻道後,用戶端和伺服器間的串連會保持開啟狀態,並保持一段事先定義好的時間。如果伺服器端沒有事件發生,而發生了逾時,伺服器端就會請求用戶端進行非同步重新串連。如果有事件發生,伺服器端會發送資料到用戶端,然後用戶端重新串連。
在他們的實驗性研究中,作者們在一個利用COMET推送方式實現(Dojo的Cometd庫)的AJAX應用和一個純拉取方式的應用之間,對資料一致性、伺服器效能、網路效能以及資料遺失進行了比較。