黃 剛,黃子娟
(南京郵電大學(xué)計算機學(xué)院、軟件學(xué)院,南京 210003)
?
Android消息推送機制在分析交互系統(tǒng)中的應(yīng)用
黃剛,黃子娟
(南京郵電大學(xué)計算機學(xué)院、軟件學(xué)院,南京210003)
摘要:探討一種基于Apache Mina的網(wǎng)絡(luò)應(yīng)用框架的推送方案,方案設(shè)計一個應(yīng)用在移動終端的Web服務(wù)性能的移動分析系統(tǒng),該系統(tǒng)可及時推送消息到客戶端程序。實驗結(jié)果表明,該推送方案具有良好的開放性與安全性,有效地降低移動應(yīng)用開發(fā)者的開發(fā)周期。
關(guān)鍵詞:移動互聯(lián)網(wǎng);Android;Apache Mina;數(shù)據(jù)推送
新世紀(jì)是一個互聯(lián)網(wǎng)的時代,人們的生活方式發(fā)生很大的變化,移動互聯(lián)網(wǎng)的快速發(fā)展使人們獲取信息的方式更加方便,智能化的移動終端的使用也更加普及,為了提高辦公效率,如何能夠充分地利用以及有效地運用移動終端,成為企業(yè)關(guān)注的重要問題。消息推送技術(shù)是由服務(wù)器主動發(fā)送消息給客戶端,當(dāng)有新消息的時候,可以及時地通知手機用戶正在發(fā)生的事情,由于推送技術(shù)具有高可靠性、高安全性、實時到達(dá)等眾多優(yōu)點,目前已經(jīng)被各行各業(yè)所采納應(yīng)用。
Web服務(wù)性能的移動分析系統(tǒng)旨在將具體應(yīng)用的性能分析結(jié)果同時發(fā)送給所有感興趣的用戶,讓用戶及時了解相關(guān)應(yīng)用的性能特點,它的主要功能是負(fù)責(zé)提供性能分析結(jié)果信息列表,當(dāng)用戶對某一Web應(yīng)用進行性能分析后將分析結(jié)果推送給相關(guān)用戶,或者某一Web應(yīng)用的性能問題被解決之后及時通知相關(guān)聯(lián)用戶,從而達(dá)到消息的及時性以及準(zhǔn)確性。
Web服務(wù)性能的移動分析系統(tǒng)所提供的主要功能和信息如下:(1)預(yù)警提醒:當(dāng)有新的性能更新信息出現(xiàn)時,會增加一個紅色圓點數(shù)字標(biāo)識提醒用戶注意查看。(2)歷史記錄:主要展示以前所更新過的Web應(yīng)用性能信息,用于了解Web應(yīng)用性能狀態(tài)的變化。(3)性能分析:用戶首先選擇相應(yīng)的Web應(yīng)用,然后輸入期望響應(yīng)時間、選擇分類器模型,根據(jù)不同需要輸入不同類別條件,然后點擊開始分析,便可以對相應(yīng)的Web應(yīng)用進行分析了。(4)綜合查詢:進行更加詳細(xì)的條款關(guān)鍵字查詢,用于快速定位具體信息。(5)個人信息:可以查看登錄人的姓名、賬號以及當(dāng)前軟件的版本號等。上面提到Web服務(wù)性能的移動分析系統(tǒng)的5個功能,其中第一個“預(yù)警提醒”中最體現(xiàn)消息的及時性,此模塊需要用到本文中主要論述的Android消息推送技術(shù)。
消息推送類似于互聯(lián)網(wǎng)中常見的信息推送,但在移動設(shè)備越來越多也加入互聯(lián)網(wǎng)的時代,對于移動客戶端的App應(yīng)用來說,所推送的信息的主要以消息的方式呈現(xiàn)給用戶。
參考有關(guān)文獻資料中信息推送的定義,以及各種包含消息推送的應(yīng)用[1],結(jié)合分析推知,消息推送是采取某種共同約定的網(wǎng)絡(luò)協(xié)議,主動將用戶所需要的或者是感興趣的消息發(fā)送到用戶移動終端的一種獲取最新通知等消息的方式。消息推送會分析用戶的喜好來判斷用戶希望接收到的消息,然后將分析后的消息推送給用戶,使用戶獲得盡可能有價值的消息。
消息推送有各種各樣的實現(xiàn)方式,包括輪詢方式、PushMail方式、持久連接以及SMS短消息方式等,這么多的實現(xiàn)方式或者是表現(xiàn)形式,歸根結(jié)底大體可以分為以下兩類[2],第一種是客戶端主動拉取方式,當(dāng)滿足預(yù)設(shè)條件的時候,直接采用pull方式到服務(wù)器獲取數(shù)據(jù);第二種是服務(wù)端主動推送方式,Push技術(shù)則是根據(jù)用戶的需要,當(dāng)服務(wù)器有新消息的時候,判斷新消息是否為用戶所感興趣的信息,如果是則把最新的消息有目的、按時地主動推送到客戶端。
3.1 Android系統(tǒng)簡介
Android是谷歌公司發(fā)布的一種基于Linux內(nèi)核的開放智能手機操作系統(tǒng),Android系統(tǒng)架構(gòu)采用了分層架構(gòu)的思想[3],如圖1所示。從上層到底層共包括四層,依次為(1)應(yīng)用程序?qū)?該層直接由運行在Dalvik虛擬機上的應(yīng)用程序組成(如SMS短信客戶端程序、Web瀏覽器、日歷等)。(2)應(yīng)用框架層:該層主要由一些供開發(fā)人員直接調(diào)用的API組成,如Activity Manager(活動管理器)、View System(視圖系統(tǒng))等,主要作用是簡化了組件的重用,使應(yīng)用間盡可能多地復(fù)用組件模塊。(3)系統(tǒng)運行庫層:是對應(yīng)用框架層提供支持的層,而該層提供的NDK使得Java能夠通過其來訪問硬件,這一層主要包含C語言標(biāo)準(zhǔn)庫、多媒體庫、SQLite、Dalvik虛擬機等。(4)Linux內(nèi)核層:該層主要包括驅(qū)動、內(nèi)存管理、進程管理、網(wǎng)絡(luò)協(xié)議棧等組件。四層架構(gòu)相互依存同時也相互獨立,這種明確的層次分工結(jié)構(gòu)降低了層與層之間的耦合性,從而當(dāng)某一層發(fā)生變動時,并不需要對其他的層進行改變。
3.2 Apache Mina
Mina是Apache軟件基金會下的開源項目[4],是一個能夠幫助用戶開發(fā)高性能和高伸縮性的網(wǎng)絡(luò)應(yīng)用程序的框架。Mina包括以下特點:(1)高效的I/O操作:Mina框架的一個重要特點是其支持非阻塞的I/O,在非阻塞模式下,所有的工作都處于異步狀態(tài),在進行讀寫操作的時候若數(shù)據(jù)未就緒,則可返回處理其他消息,從而提高其處理效率。(2)基于事件驅(qū)動:Mina采用了事件驅(qū)動機制而非類似輪詢的機制,這樣當(dāng)數(shù)據(jù)到達(dá)的時候,其會自動對數(shù)據(jù)進行相關(guān)的預(yù)處理,調(diào)用對應(yīng)的解碼器和處理邏輯,從而提高了系統(tǒng)的執(zhí)行效率和可靠性。(3)具有良好的移植性和可擴展性。
Mina框架可以分為三個層次[5],分別為I/O服務(wù)層、過濾器鏈、業(yè)務(wù)邏輯接口層,如圖2所示。Mina同時提供了網(wǎng)絡(luò)通信的Server端、Client端的封裝,使得網(wǎng)絡(luò)通信與應(yīng)用程序真正地隔離開來,使用者只需要處理其業(yè)務(wù)邏輯即可。
圖1 Android體系架構(gòu)
圖2 Mina的整體結(jié)構(gòu)
對于所提出的系統(tǒng)主要由三個部分組成:系統(tǒng)應(yīng)用服務(wù)器、移動終端消息推送服務(wù)器以及移動客戶端。系統(tǒng)應(yīng)用服務(wù)器一方面接收移動客戶端提交的信息,另一方面將所需推送的消息數(shù)據(jù)發(fā)送給移動終端消息推送服務(wù)器;消息推送服務(wù)器對數(shù)據(jù)進行加工過濾,然后發(fā)送給指定的移動終端用戶。對于應(yīng)用服務(wù)器和移動客戶端規(guī)定了相應(yīng)的API接口以及對應(yīng)的數(shù)據(jù)格式。
考慮到每次需要創(chuàng)建新連接時造成的系統(tǒng)開銷,故采用長連接的方式,長連接就是長時間保存連接,不能斷開,長連接要求系統(tǒng)必須實現(xiàn)以下功能:a.穩(wěn)定的長連接:移動客戶端在用戶登錄成功之后就必須和消息推送服務(wù)器維持一條穩(wěn)定的連接通道,來保證當(dāng)服務(wù)器有消息需要推送給用戶的時候,能夠及時發(fā)送出去。b.斷線重連:即在連接斷開的情況下能夠及時處理,并能夠有效地自我恢復(fù)。c.多客戶端連接:系統(tǒng)消息推送服務(wù)器是為多個用戶提供推送服務(wù)的,能夠進行有針對性的一對一推送,因此該服務(wù)器須能夠連接更多的客戶端。
如果只有移動客戶端,而沒有應(yīng)用服務(wù)端,那么所有的應(yīng)用數(shù)據(jù)必須都保存在手機本地,然而又由于手機內(nèi)存小以及運算速度的限制,將會成為此應(yīng)用的瓶頸,故系統(tǒng)專門設(shè)立了應(yīng)用服務(wù)器來處理具體的數(shù)據(jù)業(yè)務(wù)。服務(wù)器端的開發(fā)技術(shù)主流的有微軟的.NET、甲骨文的JavaEE以及一些開源體系,在這里選擇JavaEE作為應(yīng)用服務(wù)器端的開發(fā)技術(shù),一方面由于它同終端一樣采用Java開發(fā),使得編程更有效率;另一方面JavaEE包含很多優(yōu)秀的框架可以使Web應(yīng)用有更好的結(jié)構(gòu)。
由于Java NIO支持TCP和UDP協(xié)議,另外還支持RS232和VM內(nèi)通訊,而Mina自身就是封裝Java NIO的,又因為Mina有清晰的架構(gòu),所以能很簡單地實現(xiàn)一個底層網(wǎng)絡(luò)協(xié)議。Mina自身帶有一些常用的過濾器[6],例如LoggingFilter(日志記錄)、BlackListFilter(黑名單過濾)、CompressionFilter(壓縮)、SSLFilter(SSL加密)等。在本文的項目中,主要的工作是在發(fā)送消息的部分,所以Mina框架的實現(xiàn)主要是圍繞著IoHandler 和IoSession進行展開。
(1)客戶端的設(shè)計:首先需要在應(yīng)用程序用戶登錄成功的時候建立一個timer()定時器保持應(yīng)用程序與服務(wù)器的長連接,當(dāng)服務(wù)器有與該登錄用戶ID相匹配的消息出現(xiàn)時便會及時推送到用戶端。消息接收客戶端的設(shè)計主要分為三步:①建立一個NioSocket Connector對象;②設(shè)定過濾器;③設(shè)定消息處理器。
在實際應(yīng)用中,可以使用下面的代碼創(chuàng)建一個用戶發(fā)送消息的客戶端。
NioSocketConnector connector = new NioSocketConnector(); //初始化connector
LoggingFilter lf = new LoggingFilter();
lf.setSessionOpenedLogLevel(LogLevel.ERROR);
connector.getFilterChain().addLast("logger", lf);
connector.getFilterChain().addLast("codec",new Protocol CodecFilter(new ObjectSerializationCodecFactory())); //設(shè)置通信協(xié)議
connector.setConnectTimeoutMillis(30000); //連接服務(wù)器,超時時間為3秒
connector.setHandler(new ClientHanlder(context)); //設(shè)定客戶端的消息處理器
ConnectorFutere cf = connector.connect(new InetSocket Address("221.226.27.14", 19148));
cf.awaitUninterruptibly(); //等待連接創(chuàng)建完成
session = cf.getSession(); //獲取會話
這樣便可以使用session的write方法進行消息發(fā)送,創(chuàng)建一個WriteFuture就可以將信息發(fā)送出去了。其中在接收到推送數(shù)據(jù)后ClientHanlder進行主要的業(yè)務(wù)邏輯處理,并通過以下方法推送消息至手機端通知欄,其中NotificationService.class中具體設(shè)置了通知欄的操作,用戶根據(jù)通知便可以進入對應(yīng)的應(yīng)用及時查看所收到的消息。
private void sendMsgToService(String key, Context context, String content){
Intent intent = new Intent(context, NotificationService. class);
intent.putExtra(NotificationService.KEY, key);
intent.putExtra(NotificationService.KEYCONTENT, content);
context.startService(intent); //開啟推送服務(wù)
}
(2)服務(wù)端的設(shè)計:當(dāng)移動端提交的消息需要被推送給指定用戶的時候,首先提交到Web端,經(jīng)過Web端經(jīng)分析后把該消息推送到推送服務(wù)器,最后由推送服務(wù)器推送給指定用戶。與客戶端類似消息發(fā)送服務(wù)端的設(shè)計也主要分為三步:①建立一個SocketAcceptor,除了啟動server之外它還可以為我們可以生成過濾器DefaultIoFilterChainBuilder、設(shè)置消息處理器等功能;②設(shè)置過濾器;③設(shè)置消息處理器。
(3)推送測試:登錄系統(tǒng),使用考當(dāng)前賬戶對某一Web應(yīng)用進行性能分析,用另外一個手機使用與前面所選Web應(yīng)用相關(guān)聯(lián)的其他用戶賬戶登錄系統(tǒng),便可以看到通知欄會出現(xiàn)如圖3所示。
圖3 消息推送界面
點擊通知欄提示便可進入當(dāng)前App應(yīng)用中查看新信息詳情,如圖4所示。
圖4 查看消息界面
文中結(jié)合實際應(yīng)用場景分析了推送平臺的設(shè)計方案和解決方案,隨著移動互聯(lián)網(wǎng)的不斷發(fā)展,各種移動終端的應(yīng)用都有進行消息推送的需求,而本文中方案提供的基于Mina的推送方案具有可靠性高、安全性高、實時性高并且其實施簡單,易于推廣等優(yōu)點,在實際的生活應(yīng)用中具有極大的研究意義。
參考文獻:
[1]律智堅,吳廣財.消息推送在移動高級應(yīng)用中的研究和實現(xiàn)[J].廣東電力,2014,27(2):117-120.
[2]Mark Richards,Richard Monson-Haefel,David A. Chappell.Java Message Service[M].南京:東南大學(xué)出版社,2010.88-102.
[3]胡偉. Android體系架構(gòu)及其驅(qū)動研究[N].廣州廣播電視大學(xué)學(xué)報,2010(4):96-102.
[4]林佳作.基于長連接的移動終端消息推送系統(tǒng)的設(shè)計與實現(xiàn)[D].西南電子科技大學(xué),2014.
[5]韓東東.基于MINA框架的RTSP移動流媒體代理服務(wù)器設(shè)計與實現(xiàn)[D].西南交通大學(xué),2011.
[6]范旭.基于Mina的Android消息推送系統(tǒng)研究與實現(xiàn)[D].廈門大學(xué),2012.
黃剛(1961-),男,江蘇人,研究生導(dǎo)師,教授,研究方向為計算機在通信中的應(yīng)用,海量數(shù)據(jù)管理,移動商務(wù)平臺設(shè)計開發(fā)
黃子娟(1991-),女,山西人,碩士研究生,研究方向為移動互聯(lián)網(wǎng)、信息網(wǎng)絡(luò)與通信軟件
Application of Message Push Mechanism in the Analysis and Interactive System Based on Android Platform
HUANG Gang,HUANG Zi-juan
(College of Computer Science & Technology, Nanjing University of Posts and Telecommunications, Nanjing 210003)
Abstract:Discusses a push scheme based on network application framework of Apache Mina, designs an application of analyzing the Web Service`s performance in the mobile terminal. The system can timely push message to the client application. The experimental results show that this push scheme has the characteristics of openness and security. And it also reduces the development cycle of a mobile application effectively for developers.
Keywords:The Mobile Internet; Android; Apache Mina; Message Push
收稿日期:2015-12-30修稿日期:2016-03-02
作者簡介:
文章編號:1007-1423(2016)09-0066-04
DOI:10.3969/j.issn.1007-1423.2016.09.017
基金項目:國家自然科學(xué)基金資助項目(No.61171053)