蒲海洋++姜?jiǎng)Ⅷ?+何文孝
摘要:伴隨著互聯(lián)網(wǎng)的飛速發(fā)展,特別是在近幾年中,移動(dòng)互聯(lián)網(wǎng)的發(fā)展更為迅猛。在移動(dòng)互聯(lián)網(wǎng)中,消息推送是其中很重要的一部分,它是手機(jī)客戶端信息發(fā)布和通信的重要方式。MQTT協(xié)議是Android系統(tǒng)中消息推送的實(shí)現(xiàn)技術(shù)之一,由于此協(xié)議的簡單與便捷性目前已得到了眾多應(yīng)用。本文介紹了ActiveMQ的這種開源項(xiàng)目的應(yīng)用,通過ActiveMQ這種基于MQTT協(xié)議的開源框架來實(shí)現(xiàn)對(duì)安卓手機(jī)客戶端實(shí)時(shí)的消息推送技術(shù)。
關(guān)鍵詞:Android;MQTT;ActiveMQ;消息推送一、引言
MQTT(Message Queuing Telemetry Transport,消息隊(duì)列遙測(cè)傳輸)是一種由IBM的Andy Stanford-Clark 博士于1999年以核心技術(shù)領(lǐng)導(dǎo)人與Arcom公司的Arlen Nipper博士共同發(fā)明的輕量級(jí)消息傳送協(xié)議,主要用于消息的發(fā)布與訂閱.它具有支持多種平臺(tái)的特性,能把目前市面上幾乎所有的聯(lián)網(wǎng)設(shè)備共同連接起來。其次,ActiveMQ也是Apache出品的,最具有代表性的,性能優(yōu)越的,速度迅速的開源的消息傳送解決方案之一。同時(shí),從規(guī)范角度來說,JMS1.1和J2EE1.4都能被ActiveMQ所支持,在與J2EE項(xiàng)目整合時(shí),有很大的便捷。
二、ActiveMQ研究
(一)ActiveMQ簡介。Apache軟件基金會(huì)所研發(fā)的開源消息項(xiàng)目ActiveMQ中間件,由于它由Java語言編寫,故具有支持多平臺(tái)運(yùn)行的特點(diǎn);只要是安裝了JVM的系統(tǒng),ActiveMQ都在可以該系統(tǒng)上正常運(yùn)行。由于其擁有支援Java消息服務(wù)、Spring Framework、集群 (Clustering)、支援的編程語言(包括:Ruby、Python、PIKE、Perl、JS、C等)、協(xié)定支援(包括: WS-Notification、STOMP、XMPP、OpenWire、AMQP以及REST等)特點(diǎn)廣受程序員的喜愛。
(二)ActiveMQ安裝與部署。ActiveMQ由于是apache下的免費(fèi)開源項(xiàng)目,可以隨時(shí)進(jìn)入ActiveMQ的官網(wǎng)下載。ActiveMQ的官網(wǎng)地址為:https://activemq.apache.org/。用戶進(jìn)入官網(wǎng)后,可根據(jù)需要,下載對(duì)應(yīng)的版本。三、APP消息推送解決方案
(一)常見的消息推送解決方案實(shí)現(xiàn)原理
在安卓系統(tǒng)上,目前常見的消息推送大致有以下3種:
1、定時(shí)檢測(cè)方式:安卓手機(jī)端按照程序預(yù)先設(shè)定好的時(shí)間、定時(shí)往中間服務(wù)器發(fā)送消息檢測(cè)指令,如發(fā)現(xiàn)服務(wù)器有任何變化,就馬上與中間服務(wù)器進(jìn)行消息數(shù)據(jù)的同步。
2、 長連接方式:中間服務(wù)器與安卓手機(jī)端通過socket建立持久連接,通過長連接的這種方式,時(shí)刻進(jìn)行著與中間服務(wù)端的消息同步,如有任何變化,都能進(jìn)行消息的及時(shí)同步。但這種方式在手機(jī)端會(huì)很耗費(fèi)電量,且同時(shí)會(huì)伴隨著大量的流量耗費(fèi)。
3、攔截方式:在安卓手機(jī)端通通監(jiān)聽器,監(jiān)聽短信是否到來的Action,如檢測(cè)到短信中含有之前預(yù)定好的消息推送指令,則馬上進(jìn)行消息的推送處理,但此種方式會(huì)花費(fèi)高額的通信費(fèi)用。
(二)常見的安卓端消息推送解決方案。消息推送已經(jīng)過了較長時(shí)間的發(fā)展,目前也已出現(xiàn)了幾種常用的解決方案的辦法。
1、基于XMPP協(xié)議的Android端推送。XMPP是基于XML開發(fā)的協(xié)議,主要用于即時(shí)通信。通過此協(xié)議可以在因特網(wǎng)上向網(wǎng)絡(luò)上的其他用戶發(fā)送即時(shí)消息。其次,Androidpn是一個(gè)基于XMPP協(xié)議的一個(gè)開源項(xiàng)目實(shí)現(xiàn)。此項(xiàng)目包含了完整的安卓客戶端與消息推送服務(wù)端,通過它可以實(shí)現(xiàn)消息推送的快速開發(fā),但由于其學(xué)習(xí)成本較高,且開發(fā)周期較長,不宜于將此項(xiàng)目整合到現(xiàn)有項(xiàng)目中。
2、Google的C2DM云端推送方案。在Google開發(fā)的安卓手機(jī)平臺(tái)中,Google開發(fā)公司為了解決在安卓手機(jī)上的消息推送也專門提供了Cloudto Device Messaging服務(wù),即C2DM。通過使用C2DM可以幫助開發(fā)人員通過向服務(wù)器向安卓手機(jī)端中的應(yīng)用程序發(fā)送數(shù)據(jù)。C2DM具有簡單、便捷、輕量的特點(diǎn),允許安卓手機(jī)端的應(yīng)用程序可以被服務(wù)端所及時(shí)通知到,進(jìn)而通過它進(jìn)行與服務(wù)端的通信。但由于中國的網(wǎng)絡(luò)環(huán)境的限制,在國內(nèi)目前不能訪問Google的C2DM服務(wù)器,故C2DM這種服務(wù)在國內(nèi)暫不可用。
3、采用MQTT協(xié)議的安卓端推送。MQTT協(xié)議由于具有極為輕量的特點(diǎn),通過中間件常用于消息的訂閱與發(fā)布,由于其輕量級(jí)且消息推送文本一般字節(jié)量很小的特點(diǎn),在安卓手機(jī)端可以減少電量與流量的消耗,故它是實(shí)現(xiàn)安卓手機(jī)端消息推送功能的較為理想的方式之一。
4、使用第三方平臺(tái)。目前國內(nèi)、國外有一些推送平臺(tái)可供使用,如目前常見的國內(nèi)消息推送平臺(tái)有極光推送(JPush)、個(gè)推等,但是涉及到收費(fèi)問題、保密問題、服務(wù)質(zhì)量問題、擴(kuò)展問題等等。
四、采用ActiveMQ的Android客戶端設(shè)計(jì)
(一)Paho介紹。Paho是一個(gè)開放源碼項(xiàng)目在Eclipse技術(shù)項(xiàng)目。此項(xiàng)目為解決在飛速發(fā)展的嵌入式M2M平臺(tái)和無線連接推動(dòng)增長(M2M)技術(shù)和許多行業(yè)服務(wù)中的通訊問題,旨在提供可伸縮的開放和標(biāo)準(zhǔn)的 Machine-to-Machine (M2M) 以及物聯(lián)網(wǎng)消息協(xié)議的開源實(shí)現(xiàn)
(二)Android端設(shè)計(jì)。在安卓工程中,將paho-mqtt-client的jar包導(dǎo)入到項(xiàng)目工程中,并給項(xiàng)目加上訪問網(wǎng)絡(luò)的權(quán)限。即:
其次,加入主要的用于接受消息推送事件的MQTTService,以此來讓APP獲取與處理消息推送的事件。
(三)消息推送使用與測(cè)試。將ActiveMQ服務(wù)端與Android客戶端部署完畢后,首先在手機(jī)上啟動(dòng)消息推送服務(wù)。
再在瀏覽器中運(yùn)行ActiveMQ的服務(wù)端,以服務(wù)端在本機(jī)為例,則打開http://localhost:8161/admin/,用戶名和密碼默認(rèn)為admin。
點(diǎn)擊Topics欄目,并找到對(duì)應(yīng)的消息Name,進(jìn)入之后在Message body下輸入想要推送的消息內(nèi)容。點(diǎn)擊send后,就會(huì)在APP中接收到消息。
五、結(jié)束語
MQTT 協(xié)議作為目前常用的協(xié)議,在即時(shí)通信方面有較好使用價(jià)值。且ActiveMQ和Paho有如此良好開源項(xiàng)目的支持,很便于二次開發(fā)的整合。本文是在此框架之上對(duì)其進(jìn)行了研究與應(yīng)用,達(dá)到了應(yīng)用到實(shí)際項(xiàng)目中的目的。
項(xiàng)目名稱:基于ActiveMQ的安卓端消息推送研究與實(shí)現(xiàn)
項(xiàng)目編號(hào):15NSD-134
參考文獻(xiàn):
[1]殷昊.基于Android 平臺(tái)的消息推送能力的研究與實(shí)現(xiàn)[D].北京:北京郵電大學(xué),2013.
[2]IBM,Eurotech.MQTT V3.1 Protocol Specification.http://public.dhe.ibm.com/software/dw/webservices/ws-mqtt/mqtt-v3r1.html,2010-08-24.