999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

消息推送實現技術研究

2024-12-20 00:00:00蔣凌燕
電腦知識與技術 2024年30期

關鍵詞:消息推送;實時消息傳遞;通信協議;推送系統架構;技術方案

0 引言

隨著移動互聯網和物聯網的快速發展,消息推送技術作為實現大量信息實時傳遞的關鍵技術之一,在各種應用場景中發揮著重要的作用。從移動應用的消息通知,到電商平臺的促銷信息推送,再到工業物聯網設備的實時狀態監控,消息推送技術為社會和人民的生活提供了方便快捷的信息傳輸。

然而,隨著應用場景的不斷擴展和用戶需求的不斷提高,消息推送技術也面臨著新的挑戰。例如,如何確保在海量用戶并發訪問的情況下,消息推送依然能夠保持高并發、低延遲和高可靠性,如何保障消息傳輸過程中的安全性和用戶隱私等。

本文旨在對消息推送實現技術進行深入研究,分析不同技術方案的優缺點,并探討其適用場景。文章首先介紹消息推送的基本概念和典型應用場景,然后分別從基本通信技術、實現方式、協議和實現技術等方面進行詳細分析,最后總結全文并展望未來發展趨勢。

1 消息推送概述

消息推送是軟件系統中重要功能,由服務器主動且高效發送大量消息到用戶[1],在具體實現時對所使用的技術有較高的要求。推送功能有多種實現方式,作為軟件中的一個模塊、作為中間件或者獨立的跨平臺推送系統,常見的推送有Web推送和手機App推送等。Web推送是網站后臺對用戶需求和行為偏好進行分析,生成推送內容推送到瀏覽器,手機App推送是把信息推送到App內或者手機通知欄。

推送的形式多樣化、內容精準化和智能化是現在的主要趨勢[2-4],如何使消息推送簡便易行且高效,更好的被用戶的關注,和系統所采用的推送方式以及推送內容有關,設計方案著重提高推送精準性、運行效率和響應速率[5]。

2 基本通信技術

消息推送將消息主動推送到客戶端,由于推送頻率差別較大,采用不同的基本通信技術,常用的有基于TCP的輪詢、長連接和SMS短消息等。輪詢是由客戶端定時發起請求,服務器接受請求后返回消息,或者根據需求由服務器推送,網絡占用較少。長連接在客戶端和服務器之間保持連接來發送消息,提供消息發送的高可靠性。長連接經TCP三次握手建立,過程如圖1所示,客戶端首先發送請求SYN到服務器;服務器回復響應SYN和ACK到客戶端,表示接受請求建立連接;客戶端再發送ACK到服務器,表示確認連接的建立。SMS短消息是基于短信的推送方式,內容主要是文本,用戶訪問率高但成本高。

3 實現方式

常見的消息推送實現方式有:基于AJAX的短輪詢和長輪詢、SSE(Server-Sent Events) 、WebSocket 和FCM(Firebase Cloud Messaging) 。短輪詢和長輪詢是基于HTTP通過輪詢建立連接,長輪詢保持連接,而短輪詢不保持連接。SSE(Server-Sent Events) 建立從服務器到客戶端的流,通過事件驅動完成推送的過程。WebSocket在服務器和客戶端之間建立長期的連接,可以進行復雜的數據交互。FCM(Firebase Cloud Mes?saging) 是谷歌提供的消息發送服務,服務器通過FCM 的API發送消息到客戶端。

3.1 基于AJAX 的短輪詢和長輪詢

短輪詢是一種簡單的消息推送方式,客戶端定時向服務器發送請求,服務器接收到請求后立即返回響應信息。短輪詢的結構簡單,易于實現,但實時性較差,且服務器負載較大,適用于客戶端數量少、消息頻率低的場景。

長輪詢在服務器端保持連接并掛起,直到有數據需要發送時才返回響應,客戶端接收到響應后立即再次發起請求,從而實現消息的準實時推送。相較于短輪詢,長輪詢能夠有效降低服務器負載,提高消息推送的實時性,但實現較為復雜。

3.2 SSE(Server-Sent Events)

SSE是服務器推送技術,通過長連接在客戶端和服務器之間建立stream流,多次發送數據。服務器使用事件流發送數據到客戶端,客戶端通過HTTP連接監聽事件流,接收服務器所推送的數據。SSE采用單向數據流,從服務器發送到客戶端,可以傳輸文本和二進制數據;數據傳輸過程如圖2所示。客戶端設定請求的事件流類型,向服務器發送請求,服務器接收請求,返回的響應中設置事件的媒體類型、編碼和分塊傳輸等,服務器更新數據時將多個事件發送到客戶端;客戶端創建EventSource 對象,打開連接并通過onopen事件等完成消息接收。SSE實現更簡單,兼容性更好,適用于從服務器向客戶端推送數據。

3.3 WebSocket

WebSocket是建立在TCP連接上的全雙工通信,使用長連接發送數據,實時性較好,常用于聊天軟件、協作型軟件、實時推送系統以及在線游戲等。在Web 網站上使用時,瀏覽器設置協議為WebSocket,向服務器發送HTTP請求,服務器解析請求生成數據返回到瀏覽器,并在服務器和瀏覽器之間建立WebSocket連接。WebSocket提供事件、方法、狀態碼等用于消息傳遞;采用心跳包檢查連接狀態;連接斷開時自動重連;支持海量并發和大負載;能高效使用帶寬;性能較好,實時性方面具有優勢。

3.4 FCM(Google Cloud Messaging)

Google的FCM(Google Cloud Messaging) 是谷歌云消息,可以在APPLE、Android 和Web 網站上發送消息,提供客戶端和服務器端的組件。消息經服務器傳輸至FCM后端,打包成為元數據,再經傳輸層傳送到客戶端。FCM提供單終端、成組終端或者訂閱模式三種方式傳送消息,具備跨平臺性和可靠性。

4 推送協議

消息推送常用的IM(即時消息)協議有XMPP(可擴展消息與存在協議)、MQTT(消息隊列遙測傳輸協議)和SIP(會話初始協議)。

4.1 XMPP(可擴展消息與存在協議)

XMPP協議是一種流協議,使用TCP分片段傳送XML,包含三種基本組成:客戶端、服務器和網關,采用C/S架構進行異構的實時通信。服務器提供數據存儲、連接的管理和信息路由功能,監聽處理與客戶端的連接,還可以與其他XMPP服務器通信。網關負責異構系統之間的互聯,其中包含了多種協議轉換,可以和其他各種類型的IM(即時消息)系統互聯互通。客戶端采用簡單模式連接服務器,交換XML信息并進行解析,復雜處理由服務器進行。

4.2 SIP(會話初始協議)

SIP屬于多媒體通信協議,運行在網絡應用層上,使用范圍廣泛,在IP網絡中支持語音和視頻通話,也用于IM(即時消息系統)的消息推送。SIP協議采用C/S模式,基本功能有用戶定位與判定、會話建立和管理等。SIP協議包含請求和響應的相關內容,提供了多種請求的消息,包括INVITE、ACK、BYE等,通過一組狀態碼定義會話過程中的不同狀態。SIP協議作為文本協議,使用UDP或者TCP傳輸,對會話過程的步驟進行了明確的規定,使會話的建立、修改和終止在不同的終端之間方便進行。

4.3 MQTT(消息隊列遙測傳輸協議)

MQTT 是基于發布/訂閱模式的物聯網協議,在TCP/IP協議上實現遠程實時消息服務,用于物聯網、移動應用等,能降低通信時使用的網絡帶寬并減少占用的設備資源。MQTT 協議提供三種身份:發布者(Publish)、代理(Broker)和訂閱者(Subscribe),發布者和訂閱者都是客戶端,代理是服務器。MQTT協議傳輸的消息有主題(Topic)和負載(payload)兩種,主題供訂閱者訂閱,負載是訂閱主題后收到的內容。MQTT協議傳輸的數據包有固定頭(Fixed header)、可變頭(Vari?able header)和消息體(payload)三部分,固定頭中有數據包類型和數據包標識,可變頭在固定頭和消息體之間,內容和報文類型有關,消息體中有消息的內容和客戶相關信息。MQTT構建底層網絡傳輸,建立客戶端到服務器的連接,是基于字節流的雙向傳輸。

4.4 推送協議的適用范圍和特點

XMPP在即時通信系統中應用廣泛,基于XML進行消息傳送,提供點對點和多點通信,采用單向連接方式,由客戶端向服務器發起連接,消息在客戶端之間傳輸時采用轉發方式。XMPP在推送方面支持較成熟,有開源的服務器和開發框架可用,在Java平臺實現良好,開發簡便,跨平臺方面一般。XMPP所傳輸的消息內容豐富,消息解析便利,有利于復雜交互,提供各種各樣的消息業務模式,如留言、群發、群聊、狀態更新等,使用時服務器負荷較重。

MQTT采用發布訂閱模式,使用代理轉發消息,所傳輸的消息較輕,可靠性較強,物聯網中使用較多,消息分發高效。MQTT在網絡較差時也能有效傳輸,具有低延時且低消耗的特點;在即時通信中用于消息推送,但推送系統使用MQTT實現較復雜。

SIP在VoIP(語音通話技術)中的進行會話管理,用于即時通信時使用其擴展協議SIMPLE,提供連接的建立與維護,對于消息內容本身關注較少。傳輸的消息主要是基于文本的,消息體處理方面較弱,須編寫專門的代碼,對大數據量的語音、視頻和文件的傳輸較便捷。

5 消息推送的實現技術

根據所使用的平臺,消息類型和發送頻率以及設備數量,選擇消息推送的實現技術,跨平臺的使用整合推送方案。除了各平臺提供的適合消息推送的開發技術,手機廠家有自己的推送軟件,IT行業廠商提供專業推送系統,物聯網也有多種實現技術,以下是常用的幾種。

5.1 AndroidPN

Android平臺上的開源AndroidPN,為App提供推送各種類型消息的功能,它是基于XMPP協議,采用服務器和客戶端模式實現。AndroidPN的主要組成部分是Asmack庫和Mina庫,Asmack庫提供服務器通信功能,Mina庫是使用NIO開發的網絡通信框架。

AndroidPN的消息推送模式如圖3所示,客戶端使用Asmack庫,發起連接后發送數據到服務器;服務器使用Mina庫接收連接,然后發送返回的數據;連接建立后通過IOsession進行管理會話,業務邏輯處理由IOHandler實現。AndroidPN在客戶端提供4個主要功能:身份驗證、監聽網絡變化、監聽手機網絡狀態和監聽推送消息。客戶端使用Socket連接服務器,生成用戶id、賬號和密碼等信息,建立消息監聽,接收到消息過濾后調用回調。客戶端把要發送的消息封裝成Packet數據包放到隊列中,隊列中的Packet數據包被讀取后轉成XML格式,通過PacketWriter發送。服務器端可以用openfire實現,包含兩個部分,一部分是響應用戶請求的Web服務器,還有一部分是服務器端的XMPP消息服務,在經過身份驗證后和客戶端建立長連接收發消息。服務器端的核心功能有會話管理、用戶認證、用戶登錄狀態維護和消息推送等。An?droidPN實現了事件驅動的異步網絡API,注重消息發送的性能和功能擴展。

5.2 IBM WebSphere MQ Telemetry

IBM WebSphere MQ Telemetry 常用于物聯網,提供基于WebSocket和MQTT協議的跨平臺推送服務,在低帶寬的環境中以低功耗完成消息傳遞,同時加強數據安全與數據監測。WebSphere MQ Telemetry提供WebSphere MQ作為服務器,客戶端采用JavaScript編寫的API,在任何設備上均可使用。連接由MQTT客戶端向服務器發起;建立后發送心跳包維持連接;接著發送訂閱消息來訂閱某一主題;訂閱確認后接收該主題的系列消息。消息推送由消息發布者客戶端將業務數據封裝到消息體中,以主題方式發布消息,再傳送到訂閱者客戶端中。

5.3 EMQX(Erlang/Enterprise/Elastic MQTT Bro?ker)

EMQX(Erlang/Enterprise/Elastic MQTT Broker) 是物聯網消息推送平臺,內置規則引擎和數據集成模塊,可對大量實時數據進行處理、轉換和路由,也可以和其他系統集成。EMQX能接入大量采用QUIC協議的設備,對于采用非MQTT協議的設備使用多協議網關監聽請求并進行消息的協議轉換。EMQX在發布/ 訂閱模式下建立可靠的消息傳輸機制,提供規則引擎對傳入的消息數據進行處理和路由,然后再存儲并分析,也可以通過MQTT消息、REST API以及Kafka進行消息推送或者發送控制指令。

5.4 Python 平臺的Paho-MQTT 模塊和Eclipse-Mosquitto 模塊

Python 平臺提供的MQTT 模塊有Paho-MQTT 客戶端模塊和Eclipse-Mosquitto服務器端模塊。Paho-MQTT客戶端模塊支持多種平臺和多種語言,根據不同環境選擇對應的客戶端,提供API 進行服務器連接、消息發布、主題訂閱和消息處理等,還可進行消息持久化。Paho-MQTT支持同步方式進行訂閱與發布;這種方式下會等待消息的傳送,直到傳送完才繼續,以順序方式傳遞,從而不會丟失。Eclipse-Mosquitto 模塊用于編寫基于MQTT的服務器端程序,采用發布/ 訂閱模式,支持各種物聯網傳感器、手機、計算機等設備,適用于聯網設備數量有限的小規模環境,安裝部署使用方便,也可以和其他Broker(代理)進行橋接,支持各種操作系統和Docker容器,和Paho-MQTT模塊一起使用可以實現消息推送系統。

5.5 Apache ActiveMQ

Apache ActiveMQ 是基于消息的通信中間件,實現了JMS(Java Message Service) ,支持其兩種消息模型和多種協議。Apache ActiveMQ支持多種語言,易于和其他系統集成,提供了完善的異步消息接收可靠性保證,支持共享數據的持久化和網絡負載分配,也可為高性能集群提供消息服務。ActiveMQ支持的Advi?soryMessages可以通過標準的JMS消息監控系統,在具有復雜架構的系統中,為系統組件提供消息互換,并防止消息因各種原因停止傳送。Apache ActiveMQ 用于建立推送系統時,根據所接入的設備和環境以及響應、負載等要求,選擇協議然后創建客戶端和服務器,在不同的軟件系統之間推送數據。

5.6 APNs

蘋果的APNs提供消息服務器,用戶在服務器進行配置并編寫功能發送消息,在手機端也進行同樣的配置。發送時由服務器向APNs發起請求;APNs向手機端發送消息;手機端接收到后傳送到App中,再以通知欄或者透傳消息的方式顯示,高效且方便。

5.7 信鴿推送

信鴿推送是跨平臺的第三方推送,對不同的推送方式進行了整合,支持各種類型消息的傳送。信鴿推送提供了方便快捷的SDK,在網頁端進行配置管理,也可以自己編寫API。信鴿推送支持多種推送通道,采用長連接且具備通用性;提供圖形化界面管理臺和消息相關的REST API;移動端對業務邏輯也進行了封裝。

5.8 極光推送

極光推送支持消息類型和樣式多樣化,還可以根據標簽、地理和用戶進行消息個性化推送,通過大數據對用戶進行分析,使用AI 來選擇時機,所提供的API簡便易用,可快速建立推送,在高并發環境下提高了推送效率。

6 消息推送的技術選擇

消息推送在實現時,根據消息的類型、大小和頻率,收發消息的設備類型、平臺以及網絡環境等選擇具體的實現技術:

1) 首先,選擇基本的通信技術,數據量不大采用輪詢,數據量較大采用長連接,用戶關注性和查看比率要求高的采用SMS短消息。

2) 其次,根據推送系統的大小和實時性要求選擇實現方式,實時性要求不高的小型系統選擇短輪詢,中大型系統選擇長輪詢;實時性要求高的系統則按接入的設備類型來選擇,如果是Web系統或者是瀏覽器作為客戶端之一,可以采用SSE實現推送,接入設備數量很多且對通用性有要求可以采用WebSocket。

3) 再次,根據軟件的類型選擇協議,即時通信類的軟件使用XMPP協議,物聯網中使用MQTT協議,語音和視頻類可用SIP協議。

4) 最后,根據所使用的平臺選擇實現的技術,安卓平臺上中小規模的消息傳送可使用AndroidPN,大規模的消息傳送可通過各手機廠家的推送或者專業推送軟件來進行,物聯網平臺可以選擇IBM WebSphere MQTelemetry和EMQX等,Python平臺提供Paho-MQTT模塊和Eclipse-Mosquitto模塊,已有多個系統之間的消息傳送可以使用Apache ActiveMQ消息中間件。

7 總結

本文對消息推送實現技術進行了較為全面的概述,從基本通信技術、實現方式、協議和實現技術等方面,分析了不同技術方案的優缺點及其適用場景。消息推送采用合適的軟件方案可以為用戶提供更好的服務,讓用戶更加經濟有效地以便捷的方式接收和瀏覽信息[6-7]。隨著移動互聯網和物聯網技術的不斷發展,消息推送技術將朝著更加高效、安全、智能的方向發展[8]。未來的發展方向包括:在消息推送系統中使用邊緣計算來進行負載均衡,通過AI進行個性化推薦,以及采用綜合策略進行安全與隱私保護等。

主站蜘蛛池模板: 国产精品自在在线午夜区app| 亚洲精品无码日韩国产不卡| 伊人天堂网| 五月激情婷婷综合| 欧美一级高清片久久99| 黄色网页在线播放| 99爱在线| 精品色综合| 国产全黄a一级毛片| 色综合久久综合网| 国产成人精品亚洲日本对白优播| 久久国产精品嫖妓| 国产国拍精品视频免费看| 亚洲国产天堂久久综合226114| 最新午夜男女福利片视频| 日韩高清无码免费| 欧美成人日韩| 国产成人精品午夜视频'| 国产呦精品一区二区三区下载| 日韩在线永久免费播放| 日本国产一区在线观看| 亚洲人成人无码www| 呦系列视频一区二区三区| 亚洲码一区二区三区| 97在线观看视频免费| 亚洲中文字幕97久久精品少妇| 国产成人久久777777| 69av在线| 97超碰精品成人国产| 欧美成人a∨视频免费观看| 国产精品第页| 国产三级视频网站| 在线不卡免费视频| 亚洲第一成网站| 欧美精品H在线播放| 亚洲国产成人久久精品软件 | 亚国产欧美在线人成| 亚洲国产中文在线二区三区免| 蜜芽一区二区国产精品| 亚洲综合婷婷激情| 一级毛片无毒不卡直接观看| 久久久久夜色精品波多野结衣| 亚洲高清免费在线观看| 国产极品美女在线| 亚洲人成人伊人成综合网无码| 国产男女XX00免费观看| 超碰免费91| 国产日韩久久久久无码精品| 国内精品九九久久久精品| 欧美精品影院| 久久久久无码精品国产免费| 国产精品无码一二三视频| 亚洲最新在线| 青青青国产精品国产精品美女| 国产激情第一页| 成人一级黄色毛片| 成人看片欧美一区二区| hezyo加勒比一区二区三区| 国产国语一级毛片| 亚洲AⅤ永久无码精品毛片| 欧美中文字幕一区二区三区| 亚洲av无码久久无遮挡| 日韩一级毛一欧美一国产| 久久精品视频一| 欧美色亚洲| 国产AV毛片| 欧美国产日韩在线观看| 五月激情婷婷综合| 玖玖精品视频在线观看| 高清码无在线看| 国产亚卅精品无码| 久久久久国产精品熟女影院| www.99精品视频在线播放| 国产香蕉97碰碰视频VA碰碰看| 99久久人妻精品免费二区| 久久亚洲国产一区二区| 91小视频版在线观看www| 91九色视频网| 国产欧美专区在线观看| 91精品久久久无码中文字幕vr| 人妻丰满熟妇av五码区| 国产免费观看av大片的网站|