關(guān)鍵詞:消息推送;實(shí)時(shí)消息傳遞;通信協(xié)議;推送系統(tǒng)架構(gòu);技術(shù)方案
0 引言
隨著移動(dòng)互聯(lián)網(wǎng)和物聯(lián)網(wǎng)的快速發(fā)展,消息推送技術(shù)作為實(shí)現(xiàn)大量信息實(shí)時(shí)傳遞的關(guān)鍵技術(shù)之一,在各種應(yīng)用場(chǎng)景中發(fā)揮著重要的作用。從移動(dòng)應(yīng)用的消息通知,到電商平臺(tái)的促銷(xiāo)信息推送,再到工業(yè)物聯(lián)網(wǎng)設(shè)備的實(shí)時(shí)狀態(tài)監(jiān)控,消息推送技術(shù)為社會(huì)和人民的生活提供了方便快捷的信息傳輸。
然而,隨著應(yīng)用場(chǎng)景的不斷擴(kuò)展和用戶(hù)需求的不斷提高,消息推送技術(shù)也面臨著新的挑戰(zhàn)。例如,如何確保在海量用戶(hù)并發(fā)訪問(wèn)的情況下,消息推送依然能夠保持高并發(fā)、低延遲和高可靠性,如何保障消息傳輸過(guò)程中的安全性和用戶(hù)隱私等。
本文旨在對(duì)消息推送實(shí)現(xiàn)技術(shù)進(jìn)行深入研究,分析不同技術(shù)方案的優(yōu)缺點(diǎn),并探討其適用場(chǎng)景。文章首先介紹消息推送的基本概念和典型應(yīng)用場(chǎng)景,然后分別從基本通信技術(shù)、實(shí)現(xiàn)方式、協(xié)議和實(shí)現(xiàn)技術(shù)等方面進(jìn)行詳細(xì)分析,最后總結(jié)全文并展望未來(lái)發(fā)展趨勢(shì)。
1 消息推送概述
消息推送是軟件系統(tǒng)中重要功能,由服務(wù)器主動(dòng)且高效發(fā)送大量消息到用戶(hù)[1],在具體實(shí)現(xiàn)時(shí)對(duì)所使用的技術(shù)有較高的要求。推送功能有多種實(shí)現(xiàn)方式,作為軟件中的一個(gè)模塊、作為中間件或者獨(dú)立的跨平臺(tái)推送系統(tǒng),常見(jiàn)的推送有Web推送和手機(jī)App推送等。Web推送是網(wǎng)站后臺(tái)對(duì)用戶(hù)需求和行為偏好進(jìn)行分析,生成推送內(nèi)容推送到瀏覽器,手機(jī)App推送是把信息推送到App內(nèi)或者手機(jī)通知欄。
推送的形式多樣化、內(nèi)容精準(zhǔn)化和智能化是現(xiàn)在的主要趨勢(shì)[2-4],如何使消息推送簡(jiǎn)便易行且高效,更好的被用戶(hù)的關(guān)注,和系統(tǒng)所采用的推送方式以及推送內(nèi)容有關(guān),設(shè)計(jì)方案著重提高推送精準(zhǔn)性、運(yùn)行效率和響應(yīng)速率[5]。
2 基本通信技術(shù)
消息推送將消息主動(dòng)推送到客戶(hù)端,由于推送頻率差別較大,采用不同的基本通信技術(shù),常用的有基于TCP的輪詢(xún)、長(zhǎng)連接和SMS短消息等。輪詢(xún)是由客戶(hù)端定時(shí)發(fā)起請(qǐng)求,服務(wù)器接受請(qǐng)求后返回消息,或者根據(jù)需求由服務(wù)器推送,網(wǎng)絡(luò)占用較少。長(zhǎng)連接在客戶(hù)端和服務(wù)器之間保持連接來(lái)發(fā)送消息,提供消息發(fā)送的高可靠性。長(zhǎng)連接經(jīng)TCP三次握手建立,過(guò)程如圖1所示,客戶(hù)端首先發(fā)送請(qǐng)求SYN到服務(wù)器;服務(wù)器回復(fù)響應(yīng)SYN和ACK到客戶(hù)端,表示接受請(qǐng)求建立連接;客戶(hù)端再發(fā)送ACK到服務(wù)器,表示確認(rèn)連接的建立。SMS短消息是基于短信的推送方式,內(nèi)容主要是文本,用戶(hù)訪問(wèn)率高但成本高。
3 實(shí)現(xiàn)方式
常見(jiàn)的消息推送實(shí)現(xiàn)方式有:基于AJAX的短輪詢(xún)和長(zhǎng)輪詢(xún)、SSE(Server-Sent Events) 、WebSocket 和FCM(Firebase Cloud Messaging) 。短輪詢(xún)和長(zhǎng)輪詢(xún)是基于HTTP通過(guò)輪詢(xún)建立連接,長(zhǎng)輪詢(xún)保持連接,而短輪詢(xún)不保持連接。SSE(Server-Sent Events) 建立從服務(wù)器到客戶(hù)端的流,通過(guò)事件驅(qū)動(dòng)完成推送的過(guò)程。WebSocket在服務(wù)器和客戶(hù)端之間建立長(zhǎng)期的連接,可以進(jìn)行復(fù)雜的數(shù)據(jù)交互。FCM(Firebase Cloud Mes?saging) 是谷歌提供的消息發(fā)送服務(wù),服務(wù)器通過(guò)FCM 的API發(fā)送消息到客戶(hù)端。
3.1 基于AJAX 的短輪詢(xún)和長(zhǎng)輪詢(xún)
短輪詢(xún)是一種簡(jiǎn)單的消息推送方式,客戶(hù)端定時(shí)向服務(wù)器發(fā)送請(qǐng)求,服務(wù)器接收到請(qǐng)求后立即返回響應(yīng)信息。短輪詢(xún)的結(jié)構(gòu)簡(jiǎn)單,易于實(shí)現(xiàn),但實(shí)時(shí)性較差,且服務(wù)器負(fù)載較大,適用于客戶(hù)端數(shù)量少、消息頻率低的場(chǎng)景。
長(zhǎng)輪詢(xún)?cè)诜?wù)器端保持連接并掛起,直到有數(shù)據(jù)需要發(fā)送時(shí)才返回響應(yīng),客戶(hù)端接收到響應(yīng)后立即再次發(fā)起請(qǐng)求,從而實(shí)現(xiàn)消息的準(zhǔn)實(shí)時(shí)推送。相較于短輪詢(xún),長(zhǎng)輪詢(xún)能夠有效降低服務(wù)器負(fù)載,提高消息推送的實(shí)時(shí)性,但實(shí)現(xiàn)較為復(fù)雜。
3.2 SSE(Server-Sent Events)
SSE是服務(wù)器推送技術(shù),通過(guò)長(zhǎng)連接在客戶(hù)端和服務(wù)器之間建立stream流,多次發(fā)送數(shù)據(jù)。服務(wù)器使用事件流發(fā)送數(shù)據(jù)到客戶(hù)端,客戶(hù)端通過(guò)HTTP連接監(jiān)聽(tīng)事件流,接收服務(wù)器所推送的數(shù)據(jù)。SSE采用單向數(shù)據(jù)流,從服務(wù)器發(fā)送到客戶(hù)端,可以傳輸文本和二進(jìn)制數(shù)據(jù);數(shù)據(jù)傳輸過(guò)程如圖2所示。客戶(hù)端設(shè)定請(qǐng)求的事件流類(lèi)型,向服務(wù)器發(fā)送請(qǐng)求,服務(wù)器接收請(qǐng)求,返回的響應(yīng)中設(shè)置事件的媒體類(lèi)型、編碼和分塊傳輸?shù)?,服?wù)器更新數(shù)據(jù)時(shí)將多個(gè)事件發(fā)送到客戶(hù)端;客戶(hù)端創(chuàng)建EventSource 對(duì)象,打開(kāi)連接并通過(guò)onopen事件等完成消息接收。SSE實(shí)現(xiàn)更簡(jiǎn)單,兼容性更好,適用于從服務(wù)器向客戶(hù)端推送數(shù)據(jù)。
3.3 WebSocket
WebSocket是建立在TCP連接上的全雙工通信,使用長(zhǎng)連接發(fā)送數(shù)據(jù),實(shí)時(shí)性較好,常用于聊天軟件、協(xié)作型軟件、實(shí)時(shí)推送系統(tǒng)以及在線游戲等。在Web 網(wǎng)站上使用時(shí),瀏覽器設(shè)置協(xié)議為WebSocket,向服務(wù)器發(fā)送HTTP請(qǐng)求,服務(wù)器解析請(qǐng)求生成數(shù)據(jù)返回到瀏覽器,并在服務(wù)器和瀏覽器之間建立WebSocket連接。WebSocket提供事件、方法、狀態(tài)碼等用于消息傳遞;采用心跳包檢查連接狀態(tài);連接斷開(kāi)時(shí)自動(dòng)重連;支持海量并發(fā)和大負(fù)載;能高效使用帶寬;性能較好,實(shí)時(shí)性方面具有優(yōu)勢(shì)。
3.4 FCM(Google Cloud Messaging)
Google的FCM(Google Cloud Messaging) 是谷歌云消息,可以在APPLE、Android 和Web 網(wǎng)站上發(fā)送消息,提供客戶(hù)端和服務(wù)器端的組件。消息經(jīng)服務(wù)器傳輸至FCM后端,打包成為元數(shù)據(jù),再經(jīng)傳輸層傳送到客戶(hù)端。FCM提供單終端、成組終端或者訂閱模式三種方式傳送消息,具備跨平臺(tái)性和可靠性。
4 推送協(xié)議
消息推送常用的IM(即時(shí)消息)協(xié)議有XMPP(可擴(kuò)展消息與存在協(xié)議)、MQTT(消息隊(duì)列遙測(cè)傳輸協(xié)議)和SIP(會(huì)話(huà)初始協(xié)議)。
4.1 XMPP(可擴(kuò)展消息與存在協(xié)議)
XMPP協(xié)議是一種流協(xié)議,使用TCP分片段傳送XML,包含三種基本組成:客戶(hù)端、服務(wù)器和網(wǎng)關(guān),采用C/S架構(gòu)進(jìn)行異構(gòu)的實(shí)時(shí)通信。服務(wù)器提供數(shù)據(jù)存儲(chǔ)、連接的管理和信息路由功能,監(jiān)聽(tīng)處理與客戶(hù)端的連接,還可以與其他XMPP服務(wù)器通信。網(wǎng)關(guān)負(fù)責(zé)異構(gòu)系統(tǒng)之間的互聯(lián),其中包含了多種協(xié)議轉(zhuǎn)換,可以和其他各種類(lèi)型的IM(即時(shí)消息)系統(tǒng)互聯(lián)互通??蛻?hù)端采用簡(jiǎn)單模式連接服務(wù)器,交換XML信息并進(jìn)行解析,復(fù)雜處理由服務(wù)器進(jìn)行。
4.2 SIP(會(huì)話(huà)初始協(xié)議)
SIP屬于多媒體通信協(xié)議,運(yùn)行在網(wǎng)絡(luò)應(yīng)用層上,使用范圍廣泛,在IP網(wǎng)絡(luò)中支持語(yǔ)音和視頻通話(huà),也用于IM(即時(shí)消息系統(tǒng))的消息推送。SIP協(xié)議采用C/S模式,基本功能有用戶(hù)定位與判定、會(huì)話(huà)建立和管理等。SIP協(xié)議包含請(qǐng)求和響應(yīng)的相關(guān)內(nèi)容,提供了多種請(qǐng)求的消息,包括INVITE、ACK、BYE等,通過(guò)一組狀態(tài)碼定義會(huì)話(huà)過(guò)程中的不同狀態(tài)。SIP協(xié)議作為文本協(xié)議,使用UDP或者TCP傳輸,對(duì)會(huì)話(huà)過(guò)程的步驟進(jìn)行了明確的規(guī)定,使會(huì)話(huà)的建立、修改和終止在不同的終端之間方便進(jìn)行。
4.3 MQTT(消息隊(duì)列遙測(cè)傳輸協(xié)議)
MQTT 是基于發(fā)布/訂閱模式的物聯(lián)網(wǎng)協(xié)議,在TCP/IP協(xié)議上實(shí)現(xiàn)遠(yuǎn)程實(shí)時(shí)消息服務(wù),用于物聯(lián)網(wǎng)、移動(dòng)應(yīng)用等,能降低通信時(shí)使用的網(wǎng)絡(luò)帶寬并減少占用的設(shè)備資源。MQTT 協(xié)議提供三種身份:發(fā)布者(Publish)、代理(Broker)和訂閱者(Subscribe),發(fā)布者和訂閱者都是客戶(hù)端,代理是服務(wù)器。MQTT協(xié)議傳輸?shù)南⒂兄黝}(Topic)和負(fù)載(payload)兩種,主題供訂閱者訂閱,負(fù)載是訂閱主題后收到的內(nèi)容。MQTT協(xié)議傳輸?shù)臄?shù)據(jù)包有固定頭(Fixed header)、可變頭(Vari?able header)和消息體(payload)三部分,固定頭中有數(shù)據(jù)包類(lèi)型和數(shù)據(jù)包標(biāo)識(shí),可變頭在固定頭和消息體之間,內(nèi)容和報(bào)文類(lèi)型有關(guān),消息體中有消息的內(nèi)容和客戶(hù)相關(guān)信息。MQTT構(gòu)建底層網(wǎng)絡(luò)傳輸,建立客戶(hù)端到服務(wù)器的連接,是基于字節(jié)流的雙向傳輸。
4.4 推送協(xié)議的適用范圍和特點(diǎn)
XMPP在即時(shí)通信系統(tǒng)中應(yīng)用廣泛,基于XML進(jìn)行消息傳送,提供點(diǎn)對(duì)點(diǎn)和多點(diǎn)通信,采用單向連接方式,由客戶(hù)端向服務(wù)器發(fā)起連接,消息在客戶(hù)端之間傳輸時(shí)采用轉(zhuǎn)發(fā)方式。XMPP在推送方面支持較成熟,有開(kāi)源的服務(wù)器和開(kāi)發(fā)框架可用,在Java平臺(tái)實(shí)現(xiàn)良好,開(kāi)發(fā)簡(jiǎn)便,跨平臺(tái)方面一般。XMPP所傳輸?shù)南?nèi)容豐富,消息解析便利,有利于復(fù)雜交互,提供各種各樣的消息業(yè)務(wù)模式,如留言、群發(fā)、群聊、狀態(tài)更新等,使用時(shí)服務(wù)器負(fù)荷較重。
MQTT采用發(fā)布訂閱模式,使用代理轉(zhuǎn)發(fā)消息,所傳輸?shù)南⑤^輕,可靠性較強(qiáng),物聯(lián)網(wǎng)中使用較多,消息分發(fā)高效。MQTT在網(wǎng)絡(luò)較差時(shí)也能有效傳輸,具有低延時(shí)且低消耗的特點(diǎn);在即時(shí)通信中用于消息推送,但推送系統(tǒng)使用MQTT實(shí)現(xiàn)較復(fù)雜。
SIP在VoIP(語(yǔ)音通話(huà)技術(shù))中的進(jìn)行會(huì)話(huà)管理,用于即時(shí)通信時(shí)使用其擴(kuò)展協(xié)議SIMPLE,提供連接的建立與維護(hù),對(duì)于消息內(nèi)容本身關(guān)注較少。傳輸?shù)南⒅饕腔谖谋镜模Ⅲw處理方面較弱,須編寫(xiě)專(zhuān)門(mén)的代碼,對(duì)大數(shù)據(jù)量的語(yǔ)音、視頻和文件的傳輸較便捷。
5 消息推送的實(shí)現(xiàn)技術(shù)
根據(jù)所使用的平臺(tái),消息類(lèi)型和發(fā)送頻率以及設(shè)備數(shù)量,選擇消息推送的實(shí)現(xiàn)技術(shù),跨平臺(tái)的使用整合推送方案。除了各平臺(tái)提供的適合消息推送的開(kāi)發(fā)技術(shù),手機(jī)廠家有自己的推送軟件,IT行業(yè)廠商提供專(zhuān)業(yè)推送系統(tǒng),物聯(lián)網(wǎng)也有多種實(shí)現(xiàn)技術(shù),以下是常用的幾種。
5.1 AndroidPN
Android平臺(tái)上的開(kāi)源AndroidPN,為App提供推送各種類(lèi)型消息的功能,它是基于XMPP協(xié)議,采用服務(wù)器和客戶(hù)端模式實(shí)現(xiàn)。AndroidPN的主要組成部分是Asmack庫(kù)和Mina庫(kù),Asmack庫(kù)提供服務(wù)器通信功能,Mina庫(kù)是使用NIO開(kāi)發(fā)的網(wǎng)絡(luò)通信框架。
AndroidPN的消息推送模式如圖3所示,客戶(hù)端使用Asmack庫(kù),發(fā)起連接后發(fā)送數(shù)據(jù)到服務(wù)器;服務(wù)器使用Mina庫(kù)接收連接,然后發(fā)送返回的數(shù)據(jù);連接建立后通過(guò)IOsession進(jìn)行管理會(huì)話(huà),業(yè)務(wù)邏輯處理由IOHandler實(shí)現(xiàn)。AndroidPN在客戶(hù)端提供4個(gè)主要功能:身份驗(yàn)證、監(jiān)聽(tīng)網(wǎng)絡(luò)變化、監(jiān)聽(tīng)手機(jī)網(wǎng)絡(luò)狀態(tài)和監(jiān)聽(tīng)推送消息。客戶(hù)端使用Socket連接服務(wù)器,生成用戶(hù)id、賬號(hào)和密碼等信息,建立消息監(jiān)聽(tīng),接收到消息過(guò)濾后調(diào)用回調(diào)。客戶(hù)端把要發(fā)送的消息封裝成Packet數(shù)據(jù)包放到隊(duì)列中,隊(duì)列中的Packet數(shù)據(jù)包被讀取后轉(zhuǎn)成XML格式,通過(guò)PacketWriter發(fā)送。服務(wù)器端可以用openfire實(shí)現(xiàn),包含兩個(gè)部分,一部分是響應(yīng)用戶(hù)請(qǐng)求的Web服務(wù)器,還有一部分是服務(wù)器端的XMPP消息服務(wù),在經(jīng)過(guò)身份驗(yàn)證后和客戶(hù)端建立長(zhǎng)連接收發(fā)消息。服務(wù)器端的核心功能有會(huì)話(huà)管理、用戶(hù)認(rèn)證、用戶(hù)登錄狀態(tài)維護(hù)和消息推送等。An?droidPN實(shí)現(xiàn)了事件驅(qū)動(dòng)的異步網(wǎng)絡(luò)API,注重消息發(fā)送的性能和功能擴(kuò)展。
5.2 IBM WebSphere MQ Telemetry
IBM WebSphere MQ Telemetry 常用于物聯(lián)網(wǎng),提供基于WebSocket和MQTT協(xié)議的跨平臺(tái)推送服務(wù),在低帶寬的環(huán)境中以低功耗完成消息傳遞,同時(shí)加強(qiáng)數(shù)據(jù)安全與數(shù)據(jù)監(jiān)測(cè)。WebSphere MQ Telemetry提供WebSphere MQ作為服務(wù)器,客戶(hù)端采用JavaScript編寫(xiě)的API,在任何設(shè)備上均可使用。連接由MQTT客戶(hù)端向服務(wù)器發(fā)起;建立后發(fā)送心跳包維持連接;接著發(fā)送訂閱消息來(lái)訂閱某一主題;訂閱確認(rèn)后接收該主題的系列消息。消息推送由消息發(fā)布者客戶(hù)端將業(yè)務(wù)數(shù)據(jù)封裝到消息體中,以主題方式發(fā)布消息,再傳送到訂閱者客戶(hù)端中。
5.3 EMQX(Erlang/Enterprise/Elastic MQTT Bro?ker)
EMQX(Erlang/Enterprise/Elastic MQTT Broker) 是物聯(lián)網(wǎng)消息推送平臺(tái),內(nèi)置規(guī)則引擎和數(shù)據(jù)集成模塊,可對(duì)大量實(shí)時(shí)數(shù)據(jù)進(jìn)行處理、轉(zhuǎn)換和路由,也可以和其他系統(tǒng)集成。EMQX能接入大量采用QUIC協(xié)議的設(shè)備,對(duì)于采用非MQTT協(xié)議的設(shè)備使用多協(xié)議網(wǎng)關(guān)監(jiān)聽(tīng)請(qǐng)求并進(jìn)行消息的協(xié)議轉(zhuǎn)換。EMQX在發(fā)布/ 訂閱模式下建立可靠的消息傳輸機(jī)制,提供規(guī)則引擎對(duì)傳入的消息數(shù)據(jù)進(jìn)行處理和路由,然后再存儲(chǔ)并分析,也可以通過(guò)MQTT消息、REST API以及Kafka進(jìn)行消息推送或者發(fā)送控制指令。
5.4 Python 平臺(tái)的Paho-MQTT 模塊和Eclipse-Mosquitto 模塊
Python 平臺(tái)提供的MQTT 模塊有Paho-MQTT 客戶(hù)端模塊和Eclipse-Mosquitto服務(wù)器端模塊。Paho-MQTT客戶(hù)端模塊支持多種平臺(tái)和多種語(yǔ)言,根據(jù)不同環(huán)境選擇對(duì)應(yīng)的客戶(hù)端,提供API 進(jìn)行服務(wù)器連接、消息發(fā)布、主題訂閱和消息處理等,還可進(jìn)行消息持久化。Paho-MQTT支持同步方式進(jìn)行訂閱與發(fā)布;這種方式下會(huì)等待消息的傳送,直到傳送完才繼續(xù),以順序方式傳遞,從而不會(huì)丟失。Eclipse-Mosquitto 模塊用于編寫(xiě)基于MQTT的服務(wù)器端程序,采用發(fā)布/ 訂閱模式,支持各種物聯(lián)網(wǎng)傳感器、手機(jī)、計(jì)算機(jī)等設(shè)備,適用于聯(lián)網(wǎng)設(shè)備數(shù)量有限的小規(guī)模環(huán)境,安裝部署使用方便,也可以和其他Broker(代理)進(jìn)行橋接,支持各種操作系統(tǒng)和Docker容器,和Paho-MQTT模塊一起使用可以實(shí)現(xiàn)消息推送系統(tǒng)。
5.5 Apache ActiveMQ
Apache ActiveMQ 是基于消息的通信中間件,實(shí)現(xiàn)了JMS(Java Message Service) ,支持其兩種消息模型和多種協(xié)議。Apache ActiveMQ支持多種語(yǔ)言,易于和其他系統(tǒng)集成,提供了完善的異步消息接收可靠性保證,支持共享數(shù)據(jù)的持久化和網(wǎng)絡(luò)負(fù)載分配,也可為高性能集群提供消息服務(wù)。ActiveMQ支持的Advi?soryMessages可以通過(guò)標(biāo)準(zhǔn)的JMS消息監(jiān)控系統(tǒng),在具有復(fù)雜架構(gòu)的系統(tǒng)中,為系統(tǒng)組件提供消息互換,并防止消息因各種原因停止傳送。Apache ActiveMQ 用于建立推送系統(tǒng)時(shí),根據(jù)所接入的設(shè)備和環(huán)境以及響應(yīng)、負(fù)載等要求,選擇協(xié)議然后創(chuàng)建客戶(hù)端和服務(wù)器,在不同的軟件系統(tǒng)之間推送數(shù)據(jù)。
5.6 APNs
蘋(píng)果的APNs提供消息服務(wù)器,用戶(hù)在服務(wù)器進(jìn)行配置并編寫(xiě)功能發(fā)送消息,在手機(jī)端也進(jìn)行同樣的配置。發(fā)送時(shí)由服務(wù)器向APNs發(fā)起請(qǐng)求;APNs向手機(jī)端發(fā)送消息;手機(jī)端接收到后傳送到App中,再以通知欄或者透?jìng)飨⒌姆绞斤@示,高效且方便。
5.7 信鴿推送
信鴿推送是跨平臺(tái)的第三方推送,對(duì)不同的推送方式進(jìn)行了整合,支持各種類(lèi)型消息的傳送。信鴿推送提供了方便快捷的SDK,在網(wǎng)頁(yè)端進(jìn)行配置管理,也可以自己編寫(xiě)API。信鴿推送支持多種推送通道,采用長(zhǎng)連接且具備通用性;提供圖形化界面管理臺(tái)和消息相關(guān)的REST API;移動(dòng)端對(duì)業(yè)務(wù)邏輯也進(jìn)行了封裝。
5.8 極光推送
極光推送支持消息類(lèi)型和樣式多樣化,還可以根據(jù)標(biāo)簽、地理和用戶(hù)進(jìn)行消息個(gè)性化推送,通過(guò)大數(shù)據(jù)對(duì)用戶(hù)進(jìn)行分析,使用AI 來(lái)選擇時(shí)機(jī),所提供的API簡(jiǎn)便易用,可快速建立推送,在高并發(fā)環(huán)境下提高了推送效率。
6 消息推送的技術(shù)選擇
消息推送在實(shí)現(xiàn)時(shí),根據(jù)消息的類(lèi)型、大小和頻率,收發(fā)消息的設(shè)備類(lèi)型、平臺(tái)以及網(wǎng)絡(luò)環(huán)境等選擇具體的實(shí)現(xiàn)技術(shù):
1) 首先,選擇基本的通信技術(shù),數(shù)據(jù)量不大采用輪詢(xún),數(shù)據(jù)量較大采用長(zhǎng)連接,用戶(hù)關(guān)注性和查看比率要求高的采用SMS短消息。
2) 其次,根據(jù)推送系統(tǒng)的大小和實(shí)時(shí)性要求選擇實(shí)現(xiàn)方式,實(shí)時(shí)性要求不高的小型系統(tǒng)選擇短輪詢(xún),中大型系統(tǒng)選擇長(zhǎng)輪詢(xún);實(shí)時(shí)性要求高的系統(tǒng)則按接入的設(shè)備類(lèi)型來(lái)選擇,如果是Web系統(tǒng)或者是瀏覽器作為客戶(hù)端之一,可以采用SSE實(shí)現(xiàn)推送,接入設(shè)備數(shù)量很多且對(duì)通用性有要求可以采用WebSocket。
3) 再次,根據(jù)軟件的類(lèi)型選擇協(xié)議,即時(shí)通信類(lèi)的軟件使用XMPP協(xié)議,物聯(lián)網(wǎng)中使用MQTT協(xié)議,語(yǔ)音和視頻類(lèi)可用SIP協(xié)議。
4) 最后,根據(jù)所使用的平臺(tái)選擇實(shí)現(xiàn)的技術(shù),安卓平臺(tái)上中小規(guī)模的消息傳送可使用AndroidPN,大規(guī)模的消息傳送可通過(guò)各手機(jī)廠家的推送或者專(zhuān)業(yè)推送軟件來(lái)進(jìn)行,物聯(lián)網(wǎng)平臺(tái)可以選擇IBM WebSphere MQTelemetry和EMQX等,Python平臺(tái)提供Paho-MQTT模塊和Eclipse-Mosquitto模塊,已有多個(gè)系統(tǒng)之間的消息傳送可以使用Apache ActiveMQ消息中間件。
7 總結(jié)
本文對(duì)消息推送實(shí)現(xiàn)技術(shù)進(jìn)行了較為全面的概述,從基本通信技術(shù)、實(shí)現(xiàn)方式、協(xié)議和實(shí)現(xiàn)技術(shù)等方面,分析了不同技術(shù)方案的優(yōu)缺點(diǎn)及其適用場(chǎng)景。消息推送采用合適的軟件方案可以為用戶(hù)提供更好的服務(wù),讓用戶(hù)更加經(jīng)濟(jì)有效地以便捷的方式接收和瀏覽信息[6-7]。隨著移動(dòng)互聯(lián)網(wǎng)和物聯(lián)網(wǎng)技術(shù)的不斷發(fā)展,消息推送技術(shù)將朝著更加高效、安全、智能的方向發(fā)展[8]。未來(lái)的發(fā)展方向包括:在消息推送系統(tǒng)中使用邊緣計(jì)算來(lái)進(jìn)行負(fù)載均衡,通過(guò)AI進(jìn)行個(gè)性化推薦,以及采用綜合策略進(jìn)行安全與隱私保護(hù)等。