APP下载

基于WebSocket模式的混合移动应用消息推送研究

2017-11-07马庆

科技视界 2017年17期

马庆

【摘 要】随着移送互联网的快速发展,移动智能终端发生来巨大的变革,彻底改变了过弹出一个窗口通知用户有事情发生,通知的内容可以是未接电话的提示,可以是日历的提醒,或者是接收到的彩信。推送功能是最早在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