网页推送,是指将经过整理的信息资源以网页的形式迅速转发至用户的界面,实现用户的多层次需求,使得用户能够自己设定所需要的信息频道,并直接在用户端接收定制信息的实现方式。
服务器推送
Server push——崭新的“推”技术,它是一种先进的服务器和客户机之间的通信连接方式,利用在服务器端的CGI脚本程序把数据源源不断地推向客户机,从而使客户机和服务器之间的交互性能大大提高。在中国计算机报电脑工作室中有介绍Serverpush,我们也搜集整理一些关于Server push的资料,供大家参考。
首先也来看看传统Client pull的工作方式,Client pull以 这样的HTML文档头来自动刷新页面,使用户的浏览器能不断地刷新以接受服务器传回的内容,那么用户就不得不忍受等待“time”值的痛苦,相信在中国电信的网速之下,大家对这个深有体会。
采用了Serverpush技术的服务器在客户机做出一个请求后,和客户机建立一个永久的连接,然后服务器会根据客户机的请求不断把数据包推向客户,这个推的过程是不间断的。由服务器推向客户机的数据在客户机的浏览器上会不断产生新的内容,而且不会产生Client pull那样的HTML文档头,从而大大减少了延迟的时间,向(服务器响应——客户机请求)同步迈进了一步。
实现Serverpush技术非常简单。Server push在服务器的CGI脚本声明HTML文档类型时,把传统的content-type:text/html改为content-type:multipart/x-mixed-replace;boundary=BOUNDARY这样的文档类型,就会反馈给用户一个Server push类型的连接。这是Serverpush和Client pull的根本区别。如果CGI脚本中提供了这样的HTML文档头,服务器在处理客户机请求调用CGI脚本程序时,就会把CGI脚本中指定的数据强行推给客户机。
常用的服务器推送技术实现方式有以下三种。
服务端代码编程:最简单的方法是通过服务端代码编程实现,响应代码中使用死循环。当Web服务器接收到客户请求后开启一个线程执行服务端代码,而该方法由迟迟不肯结束,使线程无法释放。这种方法的缺点是当客户端数量增加时,服务器依然会承受很大的负担。
使用特定的Web服务器:目前的趋势是从Web服务器内部入手,用NIO(JDK1.4提出的java.nio包)改写Request/Response的实现,再利用线程池增强服务器的资源利用率,从而解决这个问题。JDK1.4版本最显著的新特性就是增加了NIO,能够以非阻塞的方式处理网络的请求,这就使得在Java中只需要少量的线程就能处理大量的并发请求了。目前支持这一非J2EE官方技术的服务器有Glassfish和Jetty。Jetty6设计来处理大量并发连接,它使用Java语言的不堵塞I/O(java.nio)库并且使用优化的输出缓冲架构。Jetty也有一个处理长连接的杀手锏:一个称为Continuations的特性。Grizzly作为GlassFish中非常重要的一个项目,就是用NIO的技术来实现应用服务器中的高性能纯Java的HTTP引擎。Grizzly还是一个独立于GlassFish的框架结构,可以单独用来扩展和构建自己的服务器软件。使用NIO不是一件简单的技术,它的一些特点使得编程的模型比原来阻塞的方式更为复杂。
手机推送
内容
手机推送服务是指服务器定向将信息实时送达手机的服务。与常见的轮询方式(伪推送)相比区别主要在于两点,一是否长联网,二是到达实时性。推送服务是长联网的,一般到达手机的延迟在0.1-0.5秒左右,而轮询方式(伪推送)不是长联网的,达到延迟时间则根据轮询时间的不同为1-10分钟,也有延迟1小时或一天的情况。一般来说,自黑莓,苹果和安卓采用标准长连接推送方式后,手机推送服务就特指能够实时到达的形式。
手机推送服务的原理很简单,就是通过建立一条手机与服务器的连接链路,当有消息需要发送到手机时,通过此链路发送即可。
推送服务的使用流程虽然略有差别但是大致都和 iOS的APNs 相似:
1、首先是应用程序注册消息推送。
2、 iOS 向 APNs Server 取得deviceToken。应用程序接受deviceToken。
3、应用程序将deviceToken发送给PUSH服务端程序。
4、 服务端程序向APNs服务发送消息。
5、APNs服务将消息发送给iPhone应用程序。
实现方式
1、Android 推送
方案1、使用C2DM服务(Google Cloud Messaging)
简介:Google推出的云消息服务,即第二代的G2DM。
优点:Google提供的服务、原生、简单,无需实现和部署服务端。
缺点:Android版本限制(必须大于2.2版本),该服务在国内不够稳定、需要用户绑定Google帐号,受限于Google。
方案2、使用XMPP协议(Openfire + Spark + Smack)
简介:基于XML协议的通讯协议,前身是Jabber,已由IETF国际标准化组织完成了标准化工作。
优点:协议成熟、强大、可扩展性强、主要应用于许多聊天系统中,且已有开源的Java版的开发实例androidpn。
缺点:协议较复杂、冗余(基于XML)、费流量、费电,部署硬件成本高。
方案3、使用MQTT协议
简介:轻量级的、基于代理的“发布/订阅”模式的消息传输协议。
优点:协议简洁、小巧、可扩展性强、省流量、省电,应用到企业领域,且已有C++版的服务端组件rsmb。
缺点:不够成熟、实现较复杂、服务端组件 rsmb 不开源,部署硬件成本较高。
方案4、使用第三方推送服务
简介:通过嵌入SDK使用第三方提供的推送服务,主流的有百度云推送,极光推送,智游推送,Urban Airship,个推,PUBNUB,蝴蝶等。
优点:稳定,成熟,节省开发和探索时间,相对自己开发成本低,推送管理界面及统计程序完善。
2、IOS推送
推荐使用APNS服务,稳定,方便,美中不足是没有推送到达的回执和统计,不方便产品运营。如对此方面有需求可以使用极光推送,个推蝴蝶等第三方推送服务解决。
3、Win-Phone推送
使用MPNS(Microsoft 推送通知服务),相应速度不错,但推送不带状态,很多功能无法实现。
评价标准
推送方案的公认评价采取4s标准:
1.Safe (安全)
推送方案应支持透传及各种加密方案,保障信息传递安全。
推送方案的ID系统应该独立于已有的网站或服务的ID系统,这样保障用户在不同手机上登录后的信息投递准确 性,避免因为取消绑定事件失败因网络传输而造成的信息误投送。
2. Stable(稳定)
稳定包括两个部分一个是服务器端的稳定性,一个是手机端的稳定性。
服务端稳定性,因为使用长连接方案,对服务器的开销和要求很大,推送方案对服务器开发要求很高,海量线程连接下的服务器稳定性是非常具有挑战性的。一般的评判标准包括:
- 同时在线时峰值 (一般按照百万并发连接时服务器稳定性评测)
- 高并发时消息平均延迟时间(一般按照1分钟处理1百万条信息评测)
- 服务稳定性 (一般要求全年99.9%以上可用,有备份,有负载均衡等)
手机端的稳定性,主要是因为中国的复杂网络状况及手机型号适配情况造成手机长时间稳定联网较困难,所以稳定性非常重要,一般的评判标准包括:
- 每日联网23.5小时以上用户比例 (表征联网稳定性)
- 消息发送后9小时内收到率 (表征到达率)
一般来说,推送方案要做网络的分运营商,分省,分机型适配,自己开发工作量较大。
3.Save(节省)
省电应注意CPU休眠,一般用服务缩短待机时间百分比评判。
省流量应注意协议的修改和冗余数据包的处理,一般用空载待机月流量评判。
4.Slim(体积小)
客户端推送服务SDK应该体积尽量小,不影响主程序的大小和复杂度,一般以小于或等于300K为宜。