傅城州, 湯 庸, 方家軒, 王大豪, 曾偉銓
(華南師范大學計算機學院,廣州 510631)
一種跨平臺即時通信系統(tǒng)實現方案
傅城州, 湯庸*, 方家軒, 王大豪, 曾偉銓
(華南師范大學計算機學院,廣州 510631)
即時通信系統(tǒng)在社交軟件中應用廣泛,特別是在移動互聯(lián)網時代,隨著移動終端設備的多樣化,即時通信系統(tǒng)在移動平臺扮演著重要的角色.基于這種背景,介紹利用HTTP協(xié)議、XMPP協(xié)議和SSH、DWR、ExtJS等框架,研究包括支持Android、iOS和網頁瀏覽器多平臺的即時通信系統(tǒng)的實現,給出了一套跨平臺即時通信系統(tǒng)的設計方案.最后,通過大量實驗表明,利用該方案實現的系統(tǒng)在可靠性和性能上都比較理想.
跨平臺; 即時通信; XMPP; DWR
即時通信[1](Instant messaging,簡稱IM)是一種終端服務,通過網絡即時傳遞文字信息、檔案、語音和視頻,成為人們在工作和生活中重要的聯(lián)系工具.隨著移動網絡業(yè)務展開,移動終端逐漸成為即時通信的主要載體.
“三網融合”開始實施后,跨平臺即時通信開發(fā)呈現出快速發(fā)展的趨勢,目前很多著名的自由軟件項目提供跨平臺的開源軟件,而且很多專業(yè)的軟件廠商也將他們的產品向不同的平臺移植.在發(fā)展的歷程中,跨平臺即時通信技術逐步形成規(guī)范.當移動通信終端、計算機和電視機一體化趨勢日益明顯,移動互聯(lián)網對社會生活各領域的影響越來越大,跨平臺即時通信逐步占據著非常重要的地位.本文提出跨平臺即時通信是支持運行在不同操作系統(tǒng)的即時信息交流工具,針對不同操作系統(tǒng)進行軟件開發(fā).以互聯(lián)網和移動網為傳輸基礎,通過智能手機、平板電腦和個人電腦等設備,傳輸文本信息、文件檔案、語音和視頻等資源.
1.1服務器技術方案
服務器主要負責提供信息的接口,并且作為各終端信息互通的橋梁,具有數據持久化、用戶權限驗證等功能.本文主要介紹利用SSH[2]框架構建Web項目服務器,SSH是基于MVC設計模式構建的開發(fā)框架.MVC分離視圖層和業(yè)務層,允許更改視圖層代碼而不需要重新編譯模型和控制器的代碼.應用的業(yè)務流程或者業(yè)務規(guī)則的改變只需要修改MVC模型層.由于模型與控制器和視圖分離,所以易于改變應用程序的數據和業(yè)務規(guī)則.
為提高整個系統(tǒng)的安全性,保證用戶在即時通信未成功連接之前,能夠正常使用系統(tǒng)其他功能,本文對系統(tǒng)功能模塊和即時通信功能模塊采用分別驗證的方法.即時通信程序啟動時,用戶首先通過服務器提供的HTTP接口登錄系統(tǒng),驗證用戶權限正確時,在服務器的用戶信息池中保存當前用戶的登錄標識,并且根據時間戳隨機生成客戶端驗證碼,作為后續(xù)用戶提交請求合法與否的驗證依據.
1.2移動客戶端通信方案
移動客戶端的通信主要基于XMPP協(xié)議[3](Extensible Messaging and Presence Protocol,可擴展通信和表示協(xié)議),是目前比較成熟的即時通信協(xié)議,將現場和上下文敏感信息標記以XML的文本標準結構化形式進行傳輸,并且具有多種開源的實現軟件實例.Openfire[4]是其中一種基于XMPP協(xié)議開源實現的即時通信服務器,本文利用Openfire擔當通信的服務器角色,結合Web框架進行消息發(fā)送和用戶信息提交等操作.
由于XMPP實現的即時通信系統(tǒng)都是基于XML流的通信,因此,在客戶端和服務器端的程序,需要實現一個專門負責XML流通信和XML解析的模塊,主要實現服務器和客戶端之間通信時TCP套接字的處理、XML流的解析和存儲等功能.
XMPP協(xié)議簇規(guī)定采用TCP協(xié)議傳輸數據,并結合SASL協(xié)議進行身份認證,以及利用TLS協(xié)議對信道進行加密,另外還設計End-To-End的數據加密機制,作為可選的數據加密策略,為數據的可靠傳輸提供保證.
1.3網頁端通信方案
利用ExtJS框架[5]開發(fā)網頁端的即時通信系統(tǒng)的界面,ExtJS是一種主要用于創(chuàng)建前端用戶界面的JavaScript框架,功能十分豐富.如圖1,采用DWR(Direct Web Remoting,網頁遠程調用框架)的服務器主動推送技術[6],將用戶發(fā)送的消息即時推送到目標用戶的瀏覽器.DWR實現反轉推送技術(DWR Reverse Ajax)的方式.主要是在B/S架構中,從服務器端向多個瀏覽器主動推送消息.在DWR所新建的實例線程中使用Reverse Ajax時,通過獲取腳本會話,對連接服務器的所有瀏覽器進行標識,達到對指定用戶進行推送消息的目的.
圖1 DWR服務器推送原理
為保證消息推送的可靠性,需要對每條推送的消息進行標識,當瀏覽器網頁端在接收到消息時,通過回調的方法,通知服務器已經成功接收該消息,并且在推送池中標記為已推送狀態(tài).
由于部分用戶沒有正常退出即時通信模塊而直接關閉瀏覽器,導致即時通信模塊設置離線狀態(tài)的函數無法執(zhí)行.因此服務器需要主動檢測用戶當前是否處于在線狀態(tài),在網頁端設置定時向服務器反饋用戶在線的處理模塊.
2.1跨平臺消息通信
跨平臺之間的通信涉及到安全性、兼容性以及可靠性等研究.移動客戶端之間的通信采用XMPP進行信息推送,移動客戶端與瀏覽器之間通過數據庫的共享,并且利用HTTP通信,實現移動客戶端的服務器和網頁應用服務器互通.
為保證消息能可靠地到達目標用戶,當消息不可達時,需要重新推送.因此,我們對每條消息進行標記,在目標用戶收到消息時發(fā)送反饋,提示服務器該消息已經接收成功,并且從數據庫中標記該消息已經推送.在網絡連接情況較差的情況下,給服務器反饋消息失敗的概率比較大,在這種情況下并不會影響通信的可靠性,目標終端將會重復接收到同一條推送消息.在移動終端利用輕量級數據庫SQLite[7]存儲消息記錄,當移動終端接收到服務器推送的消息時,判斷當前消息為新消息時再提示用戶接收,避免重復提示同一條消息.
移動客戶端向服務器反饋已接收的消息,可以不必立即發(fā)送數據,在連續(xù)接收n條消息后,再一次性向服務器反饋已經接收消息的所有編號.利用這種時間窗口機制,可以避免客戶端與服務器發(fā)生頻繁通信.網頁端和移動客戶端之間的通信邏輯,包括以下幾種狀態(tài):(1)當網頁端和移動客戶端同時在線時,消息推送至2種終端;(2)當網頁端在線,移動客戶端離線時,消息只推送至網頁端;(3)當網頁端離線,移動客戶端在線時,消息只推送至移動客戶端,并且保存在網頁端的離線消息中.
考慮到傳統(tǒng)互聯(lián)網的網絡環(huán)境優(yōu)于移動互聯(lián)網的情況,根據上述的推送邏輯,可以保證網頁端能夠成功接收消息,并且存儲完整的消息記錄,有選擇性地對移動客戶端進行推送,可以在節(jié)省移動網絡流量的情況下,保證用戶正常地收發(fā)消息.
網頁端服務器程序與移動端服務器程序部署在不同的服務器設備,當網頁端與移動端進行通信時,兩者的服務器需要搭建互通通道.在系統(tǒng)中可以采用HTTP的通信方式,在服務器之間傳輸收到新消息的用戶標識,目標服務器根據標識對該用戶進行即時信息推送,達到跨平臺互通的目的(圖2).
圖2 移動端向網頁端發(fā)送消息過程
2.2服務器消息推送實現
為保證移動客戶端和網頁端及時收到推送的消息,需要和服務器一直保持連接,稱為持久連接.建立持久連接的過程包括:服務器啟動后監(jiān)聽等待客戶端的連接,接收到客戶端請求后.對用戶進行合法性驗證,如果是合法用戶就保持連接狀態(tài),之后能夠通過該條鏈路將消息發(fā)給用戶.連接的過程中,客戶端主動定時向服務器發(fā)送冗余數據反饋在線情況,即我們通常所說的心跳包,如果客戶端長時間沒有給服務器發(fā)送心跳包,服務器判斷該客戶端已經掉線,服務器刪除該用戶的登錄狀態(tài)并斷開連接,客戶端如果需要再次與服務器通信必須重新登錄和建立連接. 設t為平均間隔時間,n為當前已經連續(xù)發(fā)送第n次心跳,Δt為當前時刻的心跳間隔時間,它們的關系如下:
(1)
根據式(1),計算平均間隔時間t:
(2)
當n>>20時,對式(2)求極限:
(3)
因此,即使在連接無效的情況下,經過180 s后,也會自動連接,不會造成消息的嚴重延遲.
對于移動客戶端和網頁端兩者保持連接的實現方式有所不同,移動客戶端利用XMPP協(xié)議通信實現持久連接,而網頁端利用DWR框架的反向Ajax通信方式保持長連接.
在XMPP協(xié)議實現的通信系統(tǒng)中,服務器由Java語言設計,基于Openfire開源項目,Web模塊采用Spring框架.服務器偵聽XMPP服務開放的5222端口,并負責與客戶端通信,實現身份認證功能,發(fā)送推送通知消息.
DWR包含服務器端Java庫、DWR Servlet和JavaScript庫.DWR框架能夠把服務器端Java對象的方法公開給JavaScript 代碼.使用DWR 可以從程序代碼中消除Ajax的請求-響應循環(huán).客戶端不需要直接處理XMLHttpRequest對象或者服務器的響應,也不需要編寫對象的序列化代碼才能把對象轉換為XML,甚至不再需要編寫Servlet代碼把 Ajax請求調整成對Java域對象的調用.DWR能夠在異步傳輸的情況下從服務器發(fā)送數據到網頁端.利用這一特性,服務器能夠主動將接收的消息推送至目標網頁.
2.3跨平臺系統(tǒng)架構
整個跨平臺即時通信系統(tǒng)的拓撲結構如圖3所示,采用了3臺服務器:2臺DELL PowerEdge 12G R720(Intel(R) Xeon(TM) CPU E5-2620*2 @ 2.0 GHz、16GB RAM、300GB*3)分別作為網頁端服務器(Web server)和移動客戶端服務器(Mobile server);1臺HP ProLiant DL380 G6(Intel(R) Xeon(TM) CPU E5560*2 @ 2.8 GHz、12GB RAM、1TB*3)作為數據庫服務器(Database server).
圖3 系統(tǒng)拓撲結構
2.4網絡傳輸可靠性驗證
為了驗證系統(tǒng)的傳輸可靠性,在2.3節(jié)構建的平臺上開展實驗.服務器的帶寬為100 Mbps,對于網頁端的測試,將客戶機接入的路由流量控制設置為1 Mbps;對于移動端的測試,分別模擬在2.5 G、3 G 和WIFI等3種不同網絡環(huán)境下測試,它們傳輸速率均值依次為53.6 Kbps、5.76 Mbps(上行)/14.4 Mbps(下行)、1 Mbps.
(1)對于網頁端的測試,利用JavaScript腳本編寫自動發(fā)送程序,進行了20組實驗,每組實驗進行如下操作:限定在20 min內,客戶機A選擇200個時間點向客戶機B發(fā)送消息,并記錄消息延遲、發(fā)送失敗的情況.圖4給出了20組實驗的結果.
(2)對移動端的測試,通過編寫Java定時發(fā)送程序,分別模擬在2.5 G、3 G和WIFI的網絡環(huán)境下,同樣進行了20組實驗(其中編號1~10、11~20分別為Android客戶端和iOS客戶端的實驗數據),對每組實驗:限制在20 min內,客戶端A選擇200個時間點向客戶端B發(fā)送消息,并記錄消息延遲、發(fā)送失敗的情況.圖5給出了20組實驗的結果.
圖4 網頁端網絡實驗
圖5 移動端網絡實驗
結果表明,在同等網絡環(huán)境的情況下,移動端的通信情況總體上優(yōu)于網頁的通信,但網頁端的延遲仍然可以保證在20 s內.移動端在WIFI網絡環(huán)境下的通信情況明顯優(yōu)于3G網絡,2.5G網絡在3種網絡中表現最差,但是總體上消息延遲時間也可以控制在12 s內,因此雖然在弱網絡環(huán)境中,也不會影響用戶的正常使用.另一方面,網頁端和移動端都不會發(fā)現大量消息發(fā)送失敗的情況,對于通信情況最差的2.5G網絡,發(fā)送消息的失敗概率控制在3.0%以內.
互聯(lián)網的開放和自由打破了以往運營商主導網絡結構的模式,承載的業(yè)務更加豐富多彩.在這種發(fā)展趨勢下,本文研究了一種跨平臺即時通信的實現方案,開發(fā)了支撐各平臺之間即時通信的系統(tǒng),該系統(tǒng)在學者網(www.scholat.com)部署并投入使用,成為國內外知名學者學術交流的重要工具.今后將繼續(xù)研究在高并發(fā)消息處理和大量用戶多種終端同時接入的瓶頸問題和服務器安全管理問題[8],進一步研究提高系統(tǒng)可靠性和通信效率的解決方案.且繼續(xù)研究開放系統(tǒng)的接口,達到資源共享和協(xié)同工作的目標.
[1]Nardi B A, Whittaker S, Bradner E. Interaction and outeraction: Instant messaging in action[C]∥Proceedings of the 2000 ACM conference on computer supported cooperative work. New York: ACM Press, 2000: 79-88.
[2]Ren Y C, Jiang D Y, Xing T, et al. Research on software development platform based on SSH framework structure[J]. Procedia Engineering, 2011, 15: 3078-3082.
[3]Saint-Andre P, Smith K, Tron?on R. XMPP: The definitive guide[M]. New York: O′Reilly Media, Inc, 2009.
[4]Ozturk O. Introduction to XMPP protocol and developing online collaboration applications using open source software and libraries[C]∥Proceedings of the 2010 international symposium on collaborative technologies and systems (CTS 2010). Chicago, USA: IEEE, 2010: 21-25.
[5]雷鐳. 基于Web的即時網絡教學平臺的設計與實現[D]. 成都:西南交通大學, 2010.
Lei L. Design and implement of Web real time teaching platform[D]. Chengdu: Southwest Jiaotong University, 2010.
[6]許建鵬. 基于DWR框架的Web應用研究與實現[D]. 青島:中國海洋大學, 2009.
Xu J P. The studies and realization of Web application based on DWR framewok[D]. Qingdao: Ocean University of China, 2009.
[7]Owens M. The definitive guide to SQLite[M]. Berkeley, California: Apress, 2006.
[8]吳迪. 基于Nginx的安全管理系統(tǒng)的設計與實現[D]. 北京:北京郵電大學, 2013.
Wu D. Design and Implementation of Security Management System Based on Nginx[D]. Beijing: Beijing University of Posts and Telecommunications, 2013.
【中文責編:莊曉瓊英文責編:肖菁】
Implementation Scheme of a Cross-Platform Instant Messaging System
Fu Chengzhou, Tang Yong*, Fang Jiaxuan, Wang Dahao, Zeng Weiquan
(School of Computer Science, South China Normal University, Guangzhou 510631, China)
The instant messaging system is widely used in social softwares. Especially in the mobile internet era, with the diversification of mobile devices, the instant messaging system plays an important role in the mobile platform. Under such background, a cross-platform instant messaging system through the HTTP protocol, XMPP protocol, and SSH, DWR, ExtJS frameworks is proposed. The implementation allows running on multi-platform, including Android, iOS and webpage. A scheme is proposed for the cross-platform instant messaging system design. Finally, a large number of experiments show that the implementation system using the scheme is ideal in terms of reliability and performance.
cross-platform; instant messaging; XMPP; DWR
2014-12-01《華南師范大學學報(自然科學版)》網址:http://journal.scnu.edu.cn/n
國家高技術研究發(fā)展計劃項目(863)(2013AA01A212);國家自然科學基金項目(61272067);國家科技支撐計劃課題(2012BAH27F05);廣東省自然基金團隊研究項目(S2012030006242)
湯庸,教授,Email: ytang@scnu.edu.cn.
TP393
A
1000-5463(2015)05-0154-05