輪詢:說白了就是客戶端定時去請求服務端, 是客戶端主動請求來促使數據更新;
長輪詢:說白了也是客戶端請求服務端,但是服務端並不是即時返回,而是當有內容更新的時候才返回內容給客戶端,從流程上講,可以理解為服務器向客戶端推送內容;
從中可以看出區別:
輪詢:
1:大量耗費服務器內存和寬帶資源,因為不停的請求服務器,很多時候 並沒有新的數據更新,因此絕大部分請求都是無效請求
2:數據不一定是實時更新,要看設定的請求間隔,基本會有延遲。
長輪詢:
1:解決了輪詢的兩個大問題,數據實時更新;
2:唯一的缺點是服務器在掛起的時候比較耗內存;
web通信中的 長連接 長輪詢
基於HTTP的長連接,是一種通過長輪詢方式實現“服務器推”的技術,它彌補了HTTP簡單的請求應答模式的不足,極大地增強了程序的實時性和交互性。
什么是長連接、長輪詢?
簡單點就是客戶端不停的向服務器發送請求以后去最新的數據信息。這里的 '不停' 其實是有停止的。只是我們人眼無法分辨是否停止,它只是一種快速的停下然后立即開始連接而已。
應用場景
長連接、長輪詢一般應用與webIM、ChatRoom和一些需要及時交互的網站應用中。web版微信二維碼 webQQ HI網頁版,Facebook IM等
優缺點
輪詢:客戶端定時向服務器發送Ajax請求,服務器接到請求后馬上返回響應信息並關閉連接。
優點:后端程序編寫比較容易。
缺點:請求中有大半是無用,浪費帶寬和服務器資源。
實例:適於小型應用。
長輪詢:客戶端向服務器發送Ajax請求,服務器接到請求后hold住連接,直到有新消息才返回響應信息並關閉連接,客戶端處理完響應信息后再向服務器發送新的請求。
優點:在無消息的情況下不會頻繁的請求,耗費資源小。
缺點:服務器hold連接會消耗資源,返回數據順序無保證,難於管理維護。
實例:WebQQ、Hi網頁版、Facebook IM。
長連接:在頁面里嵌入一個隱蔵iframe,將這個隱蔵iframe的src屬性設為對一個長連接的請求或是采用xhr請求,服務器端就能源源不斷地往客戶端輸入數據。
優點:消息即時到達,不發無用請求;管理起來也相對方便。
缺點:服務器維護一個長連接會增加開銷。
實例:Gmail聊天
Flash Socket:在頁面中內嵌入一個使用了Socket類的 Flash 程序JavaScript通過調用此Flash程序提供的Socket接口與服務器端的Socket接口進行通信,JavaScript在收到服務器端傳送的信息后控制頁面的顯示。
優點:實現真正的即時通信,而不是偽即時。
缺點:客戶端必須安裝Flash插件;非HTTP協議,無法自動穿越防火牆。
實例:網絡互動游戲。