1. 輪詢
由客戶端發(fā)送請求,服務器接收請求的過程,通過客戶端不斷請求,使得客戶端能夠模擬達到類似實時收到服務器的效果??蛻舳硕〞r向服務器發(fā)送Ajax請求,服務器接到請求后馬上返回響應信息,并關閉連接。
不管服務端數據有無更新,客戶端每隔定長時間請求拉取一次數據,可能有更新數據返回,也可能什么都沒有。
適用用戶量比較小,不太注重性能的項目,如小型應用、WEB應用、例如系統(tǒng)消息、天氣展示等。
優(yōu)點:邏輯簡單,易于理解,開發(fā)快速。
缺點:
(1)需要重復建立HTTP連接,占用大量客戶端和服務端的連接
資源。
(2)客戶端越多, 服務端壓力越大,很多時候并沒有新的數據更新,因此絕大部分請求都是無效請求。
(3)數據不一定是實時更新,要看設定的請求間隔,基本會有延遲。
2. 長輪詢
長輪詢是長連接的一種,當服務器收到客戶端發(fā)來的請求后,服務器端不會直接進行響應,而是先將這個請求掛起,然后判斷服務器端數據是否有更新。如果有更新,則進行響應,如果一直沒有數據,則會 hold 住請求,直到服務端的數據發(fā)生變化,或者等待一定時間超時才會返回。
客戶端JavaScript響應處理函數會在處理完服務器返回的信息后,再次發(fā)出請求,重新建立連接。像WebQQ/FaceBook早起都是使用長輪詢實現的。
優(yōu)點:消息即時到達,和短輪詢比起來,明顯減少了很多不必要的HTTP請求次數,在無消息的情況下不會頻繁的請求,相比之下節(jié)約了資源,在無消息的情況下不會頻繁的請求。
缺點:連接掛起會導致資源的浪費,長輪詢會造出非常多的請求,不斷的請求可能會造成的影響是數據順序無法得到保證。
3. 建議
輪訓能夠實現的功能長輪訓都能滿足,從技術角度考慮建議使用長輪訓替換輪訓實現, 節(jié)省服務器性能和帶寬, 相比下來開發(fā)成本也不高。