HTTP長連接、長輪詢和短連接、短輪詢

HTTP

HTTP1.0:規定瀏覽器與服務器只保持短暫的連接,瀏覽器的每次請求都需要與服務器建立一個TCP連接,服務器完成請求處理後立即斷開TCP連接

HTTP1.1:它支持持續連接.通過這種連接,就有可能在建立一個TCP連接後,發送請求並得到迴應,然後發送更多的請求並得到更多的迴應.通過把建立和釋放TCP連接的開銷分攤到多個請求上,則對於每個請求而言,減少了建立和關閉連接的消耗和延遲

而且,還可以發送流水線請求,也就是說在發送請求1之後的迴應到來之前就可以發送請求2.也可以認爲,一次連接發送多個請求,由客戶機確認是否關閉連接,而服務器會認爲這些請求分別來自不同的客戶端。

HTTP分爲長連接和短連接,其實本質上是說的TCP連接。TCP連接是一個雙向的通道,它是可以保持一段時間不關閉的,因此TCP連接纔有真正的長連接和短連接這一說。HTTP協議是應用層的協議,而TCP纔是真正的傳輸層協議,只有負責傳輸的這一層才需要建立連接。

長連接

客戶端不停的向服務器發送請求以獲取最新的數據信息。減少了每次建立連接和斷開連接的開銷。所以現在大部分都是長連接,例如一個頁面有很多文件,JS文件,CSS文件等等,不能每次都要建立一次連接,所以長連接是比較好的解決辦法。

長連接不會長時間保持的,如果長時間沒有響應,超時會自動斷開的。但是如果都保持連接,那麼服務器會爆掉,所以TCP連接數量是有限制的。HTTP1.1默認是長連接,也就是默認Connection的值就是keep-alive

短連接

數據傳送過程中,只在需要發送數據時,纔去建立一個連接,數據發送完成後,則斷開此連接,即每次連接只完成一項業務的發送。

輪詢

向服務器發送請求,服務器返回請求結果。不斷的操作,就叫輪詢

短輪詢

不斷的輪詢的時候,每次都是即時發送即時回覆,這樣來更新前端的數據,用來保證數據的前後臺同步。
比如電商網站,每個物品的庫存,是要不斷更新的,就會在前段不斷的發起請求,保證數據同步。

但這樣有個缺點,就是浪費了大量的資源,假如有很多人在瀏覽這個物品,但是暫時都沒有下單,大量的請求可能已經佔用了服務器的所有資源。

缺點:請求中有大半是無用,浪費帶寬和服務器資源。
實例:適於小型應用。

長輪詢

服務器收到請求後如果有數據,立刻響應請求;如果沒有數據 就會 停留 一段時間,這段時間內,如果服務器請求的數據到達(如查詢數據庫或數據的邏輯處理完成),就會立刻響應;如果這段時間過後,還沒有數據到達,則以空數據的形式響應http請求;若瀏覽器收到的數據爲空,會再次發送同樣的http請求到server;客戶端處理完響應信息後再向服務器發送新的請求。

優點:在無消息的情況下不會頻繁的請求。
缺點:服務器hold連接會消耗資源。

實例:WebQQ、Hi網頁版、Facebook IM。



參考文章:

http://web.jobbole.com/85541/

http://www.cnblogs.com/hoojo/p/longPolling_comet_jquery_iframe_ajax.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章