天天看點

ajax推送和拉取差別,AJAX推送與拉取方式的比較

使用Ajax可以開發出基于浏覽器的具有高使用者互動性和幾乎不易覺察到延遲的web應用。實時的動态資料比如新聞标題、證券報價和拍賣行情都需要盡快地發送給使用者。然而,AJAX仍然受限于web請求/響應架構的弱點,使得伺服器不能推送實時動态的web資料。

Delft科技大學的Engin Bozdag、Ali Mesbah和Arie van Deursen一起讨論了下面這些可以實作基于web的實時事件通知的方法HTTP拉取方式:在這種傳統的方法中,用戶端以使用者可定義的時間間隔去檢查伺服器上的最新資料。這種拉取方式的頻率要足夠高才能保證很高的資料精确度,但高頻率可能會導緻多餘的檢查,進而導緻較高的網絡流量。而另一方面,低頻率則會導緻錯過更新的資料。理想地,拉取的時間間隔應該等于伺服器狀态改變的速度。

2.HTTP流:這種方法由存在于不間斷的HTTP連接配接響應中或某個XMLHttpRequest連接配接中的伺服器資料流所組成。

3.反轉AJAX:服務流應用到AJAX,就是所謂的反轉AJAX 或者COMET 。它使得伺服器在某事件發生時可以發送消息給用戶端,而不需要用戶端顯式的請求。目标在于達到狀态變化的實時更新。COMET使用了HTTP/1.1中的持續連接配接的特性。通過HTTP/1.1,除非另作說明,伺服器和浏覽器之間的TCP連接配接會一直保持連接配接狀态,直到其中一方發送了一條明顯的“關閉連接配接”的消息,或者有逾時以及網絡錯誤發生。

4.長時間輪詢:也就是所謂的異步輪詢,這種方式是純伺服器端推送方式和用戶端拉取方式的混合。它是基于BAYEUX協定的。這個協定遵循基于主題的釋出——訂閱機制。在訂閱了某個頻道後,用戶端和伺服器間的連接配接會保持打開狀态,并保持一段事先定義好的時間。如果伺服器端沒有事件發生,而發生了逾時,伺服器端就會請求用戶端進行異步重新連接配接。如果有事件發生,伺服器端會發送資料到用戶端,然後用戶端重新連接配接。

在他們的實驗性研究中,們在一個利用COMET推送方式實作(Dojo的Cometd庫)的AJAX應用和一個純拉取方式的應用之間,對資料一緻性、伺服器性能、網絡性能以及資料遺失進行了比較。