馬慶
【摘 要】隨著移送互聯網的快速發展,移動智能終端發生來巨大的變革,徹底改變了過彈出一個窗口通知用戶有事情發生,通知的內容可以是未接電話的提示,可以是日歷的提醒,或者是接收到的彩信。推送功能是最早在Email中被采用的,用來提示用戶有新的信息。當今移動互聯網時代的智能終端對于推送功能更加地普及,已經不再只是僅僅用在推送郵件了,而更多地用在移動終端的APP中了。本文將圍繞 Hybrid App 的 websocket 消息推送進行一系列的探索。
【關鍵詞】WebSocket;消息推送;混合應用
中圖分類號: TP311.52 文獻標識碼: A 文章編號: 2095-2457(2017)17-0023-002
Research on Message Push of Hybrid Mobile Application Based on WebSocket Model
MA Qing
(Hunan Software Vocational College,Xiangtan Hunan 411100,China)
【摘 要】With the rapid development of the transfer of the Internet,mobile smart terminal to a huge change, completely changed the pop-up window to inform the user something happened,the contents of the notice can be missed calls,can be reminders of the calendar, or receive To the MMS.Push function is the first in the Email was used to prompt the user to have new information. Today's mobile Internet era of intelligent terminals for the push function is more popular,is no longer just used to push mail,and more used in the mobile terminal APP.This article will be around the Hybrid app websocket message push a series of exploration.
【關鍵詞】WebSocket;Message push;Hybrid application
0 引言
目前主流的移動操作系統(Android、iOS)的 webview 都已經支持websocket,所以對于混合移動應用,webscoket也將成為消息推送的選擇。混合應用一般使用 Cordova之類的中間件,以WebView作為用戶界面層,以 Javascript作為基本邏輯,以及和中間件通訊,再由中間件訪問底層 API 的方式,進行應用開發。
1 移動應用消息推送一般模式
1.1 使用GCM(Google Cloude Messaging)
Android自帶的推送GCM可以向Android應用程序發送數據。它是一個輕量級的消息,告訴Android應用程序有新的數據要從服務器獲取,或者它可能是一個消息,其中包含了4KB的payload data(像即時通訊這類應用程序可以直接使用該payload消息)。GCM服務處理排隊的消息,并把消息傳遞到目標設備上運行的Android應用程序。
優點:Google提供的服務、原生、簡單,無需實現和部署服務端。
缺點:1)要求Android 2.2以上,對于不少2.2以前的系統沒法推送;
2)國內服務不穩定。而且不少國內的終端廠商紛紛把Google的服務去掉,替換上自己的。
3)需要用戶綁定Google賬號,但不少國內用戶沒有Google賬號。
1.2 使用XMPP協議
XMPP是一種基于XML的協議,它繼承了在XML環境中靈活的發展性,有很強的可擴展性。包括上面講的GCM服務器底層也是采用XMPP協議封裝的。
優點:協議成熟、強大、可擴展性強、目前主要應用于許多聊天系統中,且已有開源的Java版的開發實例androidpn。
缺點:協議較復雜、冗余(基于XML)、費流量、費電,部署硬件成本高。
Androidpn(Android Push Notification)就是基于XMPP開源組件的一套整合方案,服務端基于Openfire、客戶端基于Smack。
1)Androidpn服務端重啟后客戶端不會重連,這個非常悲劇。
2)由于服務器不保存消息,造成了如果客戶端當前離線就收不到消息。
3)Androidpn發送完消息就不管了,所以沒有消息回執報表之類,造成沒法做應用后續的數據分析用戶體驗的改善,這對于企業級的應用是個致命傷。
XMPP協議比較費電費流量,這個對當前智能機的消耗太大,在窄帶網絡和不穩定的(手機)網絡都不是最優的選擇。但總體來說,XMPP協議還是比較成熟的。
1.3 使用MQTT協議
輕量級的、基于代理的“發布/訂閱”模式的消息傳輸協議。
優點:協議簡潔、小巧、可擴展性強、省流量、省電,目前已經應用到企業領域
缺點:不夠成熟、實現較復雜、服務端組件rsmb不開源,部署硬件成本較高。endprint
1.4 HTTP輪循方式
定時向HTTP服務端接口(Web Service API)獲取最新消息。
優點:實現簡單、可控性強,部署硬件成本低。
缺點:實時性差。
2 Websocket 接口簡介
WebSocket 的實現分為客戶端和服務端兩部分,客戶端(通常為瀏覽器)發出 WebSocket 連接請求,服務端響應,實現類似 TCP 握手的動作,從而在瀏覽器客戶端和 WebSocket 服務端之間形成一條 HTTP 長連接快速通道。兩者之間后續進行直接的數據互相傳送,不再需要發起連接和響應。同時兩者都可以關閉這個長連接。我們正是利用了混合移動應用的 webview 可以支持 websocket 的這個特性來實現服務器端對客戶端的一個消息推送。Websocket 針對客戶端而言,性能,資源使用以及及時性要比傳統的輪詢更好。
3 混合移動解決方案
3.1 瀏覽器發出握手請求
首先瀏覽器以標準的HTTP Get方式向服務器發出握手請求,在請求的頭信息中加入了Websocket協議所需要的一些信息。示例如下:
GET /WSHandler.ashx HTTP/1.1
Connection:Upgrade
Host:localhost:1550
Origin:http://localhost:1550
Sec-WebSocket-Key:A3IIMlEc9ARZWlO9ShrePw==
Sec-WebSocket-Version:13
Upgrade:websocket
然后服務器響應握手請求服務器在獲得這些頭信息后,經過處理,以HTTP方式進行回復,回復時也在頭信息的部分加入了Websocket協議所需要的信息。示例如下:
HTTP/1.1 101 Switching Protocols
Upgrade: Websocket
Sec-WebSocket-Accept lJYdhpEDwO4BMgu0meIY94nJIYs=
Connection: Upgrade
經過這樣的一個握手過程之后,瀏覽器與服務器之間就建立起了一條TCP通道。
數據幀在Websocket協議中,數據使用一系列的幀來傳輸。Websocket協議有著諸多的優點:(1)支持SSL,安全性高;(2)整體性能高,無論是服務器的負載還是網絡帶寬的成本都大大降低;(3)默認采用80或443端口進行數據傳輸,一般不會被封堵;(4)可以支持跨域連接;(5)在W3C中定義了Javascript API,客戶端編程更加方便。
混合應用一般使用 Cordova 之類的中間件,以 WebView 作為用戶界面層,以 Javascript 作為基本邏輯,以及和中間件通訊,再由中間件訪問底層 API 的方式,進行應用開發。開發時可能不采用或者大部分不采用原生語言,但是卻有所有原生應用的特性。而開發消息推送功能時,我們就既可以使用 Native App 的系統自帶推送如 GCM 和 APNS,又可以使用基于 html5 的 websocket 推送。對于混合應用的 websocket 消息推送,其基本原理如下:
Hybrid app websocket由于開發周期短,跨平臺性好,維護成本低,一般可以用于混合應用的消息推送。一旦推送服務器出現異常,我們的消息推送將變得非常被動。 但是 GCM 和 APNS 也是使用長連接進行消息推送,而且一個手機上的所有 app 共用一個長連接,對于手機性能將會有極大的幫助。
圖1 Hybrid app websocket 工作流程
4 總結
隨著手機性能的不斷改善,hybrid app 的性能幾乎接近原生app的體驗,最重要的是還可以跨平臺,所以hybrid app越來越受到開發者的青睞,尤其是前端開發者。他們既能利用熟悉的html5,css3,angular js作為主體開發語言,又能適時利用Cordova plugin調用底層的 API,這樣既節約了開發成本,又能體驗原生開發的樂趣。本文就利用Cordova跨移動平臺框架,開發了一組調用local notification的android plugin,前端代碼不需要改變,我們只需要編寫iOS端的local notification就可以適配一下ios平臺。利用這種方法,我們同樣可以擴展更多plugin。而websocket作為HTML5的新特性,它不像傳統的輪詢查詢服務端的方式而是主動push的方式向客戶端推送消息,websocket這種長連接的特性不僅適合消息推送,對于實時在線聊天功能也是非常適合。本文就結合了websocket和Cordova的特性開發了混合移動的消息推送。
【參考文獻】
[1]基于Web服務的勞動保障管理信息系統設計與實現[J].陳軍.科學大眾(科學教育),2012(08).
[2]張楓蕾.移動大互聯時代 APP營銷三重價值[J].廣告人,2012(02).
[3]基于Web Services的電子圖書一體化查詢平臺設計[J].杜治波.情報探索,2012(07).
[4]WebSocket在Web實時通信領域的研究[J].李代立,陳榕.電腦知識與技術,2010(28).
[5]孫清國,朱瑋,劉華軍,張鵬.Web應用中的服務器推送技術研究綜述[J].計算機系統應用,2008(11).
[6]Approximate covering detection among content-based subscriptions using space filling curves[J].Zhenhui Shen,Srikanta Tirthapura.Journal of Parallel and Distributed Computing,2012 (12).
[7]Use of RSS feeds to push online content to users[J].Dan Ma.Decision Support Systems,2012(1).
[8]An MID-Based Load Balancing Approach for Topic-Based Pub-Sub Overlay Construction[J].Ruisheng Shi,Fuqiang Liu,Yang Zhang,Bo Cheng,Junliang Chen. Tsinghua Science & Technology,2011(6).
[9]A dynamic and fast event matching algorithm for a content-based publish/subscribe information dissemination system in Sensor-Grid[J]. Mohammad Mehedi Hassan,Biao Song,Eui-Nam Huh. The Journal of Supercomputing,2010(3).
[10]An Efficient Publish-subscribe Protocol for Collaborative Content Delivery-Ex-PUSH.Mallick S,Kushwaha D S.2012 International Symposium on Cloud and Services Computing.2012.
[11]Towards Effectively Identifying RESTful Web Services. Zhao Y,Dong L,Lin R, et al. 2014 IEEE International Conference on Web Services, 2014.endprint