即时通讯开发如何在WebSocket基础上实现Hybrid移动应用的消息推送

消息推送对于 APP 至关重要,一个及时有效的消息推送能够帮助客户获取有价值的信息,所以说消息推送是移动应用的一项重要功能。目前主流的移动操作系统(Android、iOS)的 webview 都已经支持 WebSocket, 所以对于Hybrid移动应用,WebSocket 也将成为消息推送的备用选择。

何为Hybrid移动应用?

Hybrid App(混合模式移动应用)是指介于web-app、native-app这两者之间的app,兼具“Native App良好用户交互体验的优势”和“Web App跨平台开发的优势”。目前流行的Hyrbid技术有很多,比如:Cordova (来自Phonegap)、React Native、Weex(来自阿里巴巴)、WeX5等,有兴趣可自行百度。

WebSocket简介

WebSocket 是 HTML5 一种新的协议。它实现了浏览器与服务器全双工通信,能更好的节省服务器资源和带宽并达到实时通讯,它建立在 TCP 之上,同 HTTP 一样通过 TCP 来传输数据,但是它和 HTTP 有很大区别。

Hybrid移动应用消息推送技术原理

混合应用一般使用 Cordova 之类的中间件,以 WebView 作为用户界面层,以 Javascript 作为基本逻辑,以及和中间件通讯,再由中间件访问底层 API 的方式,进行应用开发。开发时可能不采用或者大部分不采用原生语言,但是却有所有原生应用的特性。而开发消息推送功能时,我们就既可以使用 Native App 的系统自带推送如 GCM 和 APNS,又可以使用基于 html5 的 websocket 推送。

目前后者主要应用于原生 app, 而前者由于开发周期短,跨平台性好,维护成本低,一般可以用于混合应用的消息推送。基于 websocket 的消息推送,我们就可以自己去实现消息推送的服务端,这样我们就掌握了推送服务的主动权,对于安全性极高的企业,websocket 推送无疑是最好的选择,因为如果使用 GCM 或者 APNS 推送,我们不得不将信息发送到 GCM server 或者 APNS server, 再由 GCM 或者 APNS 服务端转发到客户端,信息安全性不得而知。一旦推送服务器出现异常,我们的消息推送将变得非常被动。 但是 GCM 和 APNS 也是使用长连接进行消息推送,而且一个手机上的所有 app 共用一个长连接,对于手机性能将会有极大的帮助。两种推送各有利弊,读者可自选选择。即时通讯聊天软件app开发可以加蔚可云的v:weikeyun24咨询

以上观点有一个常识性的错误,那就是iOS平台上,消息推送属系统级的行为,当应用处于后台时消息推送必须通过iOS官方的APNS通道进行,否则没有第2种可能性。

WebSocket 接口简介

WebSocket 的实现分为客户端和服务端两部分,客户端(通常为浏览器)发出 WebSocket 连接请求,服务端响应,实现类似 TCP 握手的动作,从而在浏览器客户端和 WebSocket 服务端之间形成一条 HTTP 长连接快速通道。两者之间后续进行直接的数据互相传送,不再需要发起连接和响应。同时两者都可以关闭这个长连接。我们正是利用了混合移动应用的 webview 可以支持 websocket 的这个特性来实现服务器端对客户端的一个消息推送。Websocket 针对客户端而言,性能,资源使用以及及时性要比传统的轮询更好。

Websocket 消息推送的利弊

Websocket 消息推送优点 :

    开发周期短,维护成本低。
    消息不经转第三方服务器,直接由服务器发送到客户端,安全性好。基于 GCM 或者 APNS 的消息推送会把消息发送 GCM 服务器或 APNS 服务器,再由他们转发到客户端。
    自己开发服务端,可扩展性好。
    对于客户端而言,长连接比轮询的方式性能和及时性更好。


Websocket 消息推送缺点 :

    长连接浪费服务端资源。
    不能后台运行,一旦 app 退出就不能收到 notification。
    由于服务器保持多个长连接,性能将会下降,最大连接数也会有限制。

随着手机性能的不断改善,hybrid app 的性能几乎接近原生 app 的体验,最重要的是还可以跨平台,所以 hybrid app 越来越受到开发者的青睐,尤其是前端开发者。他们既能利用熟悉的 html5, css3,angular js 作为主体开发语言,又能适时利用 Cordova plugin 调用底层的 API,这样既节约了开发成本,又能体验原生开发的乐趣。
 

猜你喜欢

转载自blog.csdn.net/wecloud1314/article/details/126661904