1. 程式人生 > >輪詢、長輪詢、長連接、socket連接、WebSocket

輪詢、長輪詢、長連接、socket連接、WebSocket

解決 無法自動 客戶端瀏覽器 主動 本質 情況下 服務器維護 ica 存在

輪詢:客戶端定時向服務器發送Ajax請求,服務器接到請求後馬上返回響應信息並關閉連接。
  優點:後端程序編寫比較容易。
  缺點:請求中有大半是無用,浪費帶寬和服務器資源。(而每一次的 HTTP 請求和應答都帶有完整的 HTTP 頭信息,這就增加了每次傳輸的數據量)
  實例:適於小型應用。

長輪詢:客戶端向服務器發送Ajax請求,服務器接到請求後hold住連接,直到有新消息才返回響應信息並關閉連接(或到了設定的超時時間關閉連接),客戶端處理完響應信息後再向服務器發送新的請求。
  優點:在無消息的情況下不會頻繁的請求,節省了網絡流量,解決了服務端一直疲於接受請求的窘境
  缺點:服務器hold連接會消耗資源,需要同時維護多個線程,服務器所能承載的TCP連接數是有上限的,這種輪詢很容易把連接數頂滿。


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

長連接:在頁面裏嵌入一個隱蔵iframe,將這個隱蔵iframe的src屬性設為對一個長連接的請求,服務器端就能源源不斷地往客戶端輸入數據。
  優點:消息即時到達,不發無用請求。
  缺點:服務器維護一個長連接會增加開銷。
  實例:Gmail聊天

Flash Socket:在頁面中內嵌入一個使用了Socket類的 Flash 程序JavaScript通過調用此Flash程序提供的Socket接口與服務器端的Socket接口進行通信,JavaScript在收到服務器端傳送的信息後控制頁面的顯示。
  優點:實現真正的即時通信,而不是偽即時。


  缺點:客戶端必須安裝Flash插件;非HTTP協議,無法自動穿越防火墻。
  實例:網絡互動遊戲。

WebSocket:

  WebSocket 協議本質上是一個基於 TCP 的協議。為了建立一個 WebSocket 連接,客戶端瀏覽器首先要向服務器發起一個 HTTP 請求,這個請求和通常的 HTTP 請求不同,包含了一些附加頭信息,其中附加頭信息”Upgrade: WebSocket”表 明這是一個申請協議升級的 HTTP 請求,服務器端解析這些附加的頭信息然後產生應答信息返回給客戶端,客戶端和服務器端的 WebSocket 連接就建立起來了,雙方就可以通過這個連接通道自由的傳遞信息,並且這個連接會持續存在直到客戶端或者服務器端的某一方主動的關閉連接。

輪詢、長輪詢、長連接、socket連接、WebSocket