消息推送的幾種實現方式

B/S架構的系統多使用HTTP協議,所以首先來看看HTTP協議:

HTTP協議的特點:

  • 列表內容
  • 無狀態性;
  • 通過Internet發送請求消息和響應消息;
  • 使用端口接收和發送消息,默認爲80端口;但是底層還是使用Socket完成。

HTTP協議決定了服務器與客戶端之間的連接方式,無法直接實現消息推送。
所以就有一些變相的解決方法: 雙向通信和消息推送

1.輪詢:

客戶端定時向服務器發送Ajax請求,服務器接到請求後馬上返回響應信息,並關閉連接。

優點:後端程序編寫比較容易
缺點:請求中大半是無用的,浪費帶寬和服務器資源
實例:適用於小型應用

2.長輪詢:

客戶端向服務器發送Ajax請求,服務器接到請求後Hold住連接,直到有新消息才返回響應信息,並關閉連接;客戶端處理完響應信息後再向服務器發送新的請求。

優點:在無消息的情況下不會頻繁的請求,耗費的資源少
缺點:服務器Hold住連接會消耗資源,返回數據順序無法保證,難於管理和維護
實例:WebQQ、Hi網頁版、FaceBook IM等

3.長連接:

在頁面中嵌入一個隱藏的jframe,將這個隱藏的iframe的src屬性設置爲對一個長連接的請求或者採用XRH請求,服務器端就能源源不斷地往客戶端輸入數據。

優點:消息即時到達,不發無用的請求;管理起來也相對方便
缺點:服務器維護一個長連接會增加開銷
實例:Gmail聊天

4.Flash Socket:

在頁面中嵌入一個使用了Socket類的Flash程序,JavaScript通過調用此Flash程序提供的Socket接口與服務器端的Socket接口進行通信,JavaScript在收到服務器端傳送的信息後控制頁面的顯示。

優點:實現真正的即時通信,而不是僞即時
缺點:客戶端必須安裝Flash插件;非HTTP協議,無法自動穿越防火牆
實例:網絡互動遊戲

5.WebSocket:

WebSocket是HTML5開始提供的一種瀏覽器與服務器間進行全雙工通訊的網絡技術;依靠這種技術可以實現客戶端和服務器端的長連接,雙向實時通訊。

優點:事件驅動;異步;使用WS或者WSS協議的客戶端Socket;能夠實現真正意義上的推送功能
缺點:少部分瀏覽器不支持,不同瀏覽器支持的程度和方式都不同

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