AJAX推送與拉取方式的比較
實時的動態(tài)數(shù)據(jù)比如新聞標(biāo)題、證券報價和拍賣行情都需要盡快地發(fā)送給用戶。然而,AJAX仍然受限于web請求/響應(yīng)架構(gòu)的弱點(diǎn),使得服務(wù)器不能推送實時動態(tài)的web數(shù)據(jù)。
Delft科技大學(xué)的Engin Bozdag、Ali Mesbah和Arie van Deursen一起討論了下面這些可以實現(xiàn)基于web的實時事件通知的方法:
1.HTTP拉取方式:在這種傳統(tǒng)的方法中,客戶端以用戶可定義的時間間隔去檢查服務(wù)器上的最新數(shù)據(jù)。這種拉取方式的頻率要足夠高才能保證很高的數(shù)據(jù)精確度,但高頻率可能會導(dǎo)致多余的檢查,從而導(dǎo)致較高的網(wǎng)絡(luò)流量。而另一方面,低頻率則會導(dǎo)致錯過更新的數(shù)據(jù)。理想地,拉取的時間間隔應(yīng)該等于服務(wù)器狀態(tài)改變的速度。
2.HTTP流:這種方法由存在于不間斷的HTTP連接響應(yīng)中或某個XMLHttpRequest連接中的服務(wù)器數(shù)據(jù)流所組成。
3.反轉(zhuǎn)AJAX:服務(wù)流應(yīng)用到AJAX推送,就是所謂的反轉(zhuǎn)AJAX 或者COMET 。它使得服務(wù)器在某事件發(fā)生時可以發(fā)送消息給客戶端,而不需要客戶端顯式的請求。目標(biāo)在于達(dá)到狀態(tài)變化的實時更新。COMET使用了HTTP/1.1中的持續(xù)連接的特性。通過HTTP/1.1,除非另作說明,服務(wù)器和瀏覽器之間的TCP連接會一直保持連接狀態(tài),直到其中一方發(fā)送了一條明顯的“關(guān)閉連接”的消息,或者有超時以及網(wǎng)絡(luò)錯誤發(fā)生。
4.長時間輪詢:也就是所謂的異步輪詢,這種方式是純服務(wù)器端推送方式和客戶端拉取方式的混合。它是基于BAYEUX協(xié)議的。這個協(xié)議遵循基于主題的發(fā)布——訂閱機(jī)制。在訂閱了某個頻道后,客戶端和服務(wù)器間的連接會保持打開狀態(tài),并保持一段事先定義好的時間。如果服務(wù)器端沒有事件發(fā)生,而發(fā)生了超時,服務(wù)器端就會請求客戶端進(jìn)行異步重新連接。如果有事件發(fā)生,服務(wù)器端會發(fā)送數(shù)據(jù)到客戶端,然后客戶端重新連接。
在他們的實驗性研究中,作者們在一個利用COMET推送方式實現(xiàn)(Dojo的Cometd庫)的AJAX推送應(yīng)用和一個純拉取方式的應(yīng)用之間,對數(shù)據(jù)一致性、服務(wù)器性能、網(wǎng)絡(luò)性能以及數(shù)據(jù)遺失進(jìn)行了比較。
【編輯推薦】