消息推送實現方式

消息推送:

  使用消息推送的方法有不少,原理大體是:移動端與消息服務器保持一個長鏈接,一旦服務器有消息就推給客戶端,客戶端收到消息作相應的處理。javascript

消息推送的幾種實現方式:

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

HTTP協議的特色:
  列表內容
  無狀態性;
  經過Internet發送請求消息和響應消息;
  使用端口接收和發送消息,默認爲80端口;可是底層仍是使用Socket完成。

  HTTP協議決定了服務器與客戶端之間的鏈接方式,沒法直接實現消息推送。 
  因此就有一些變相的解決方法: 雙向通訊和消息推送html5

1.輪詢:

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

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

2.長輪詢:

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

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

3.長鏈接:

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

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

4.Flash Socket:

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

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

5.WebSocket:

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

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

 

參考:服務器

  https://blog.csdn.net/wangchengiii/article/details/77895280websocket

  https://88250.b3log.org/web-message-push

  Android 幾種消息推送方案總結:https://www.cnblogs.com/Joanna-Yan/p/6241354.html

相關文章
相關標籤/搜索