消息推送:
使用消息推送的方法有很多,原理大致是:移動端與消息服務器保持一個長連接,一旦服務器有消息就推給客戶端,客戶端收到消息做相應的處理。
消息推送的幾種實現方式:
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;能夠實現真正意義上的推送功能
缺點:少部分瀏覽器不支持,不同瀏覽器支持的程度和方式都不同
參考:
https://blog.csdn.net/wangchengiii/article/details/77895280
https://88250.b3log.org/web-message-push
Android 幾種消息推送方案總結:https://www.cnblogs.com/Joanna-Yan/p/6241354.html
