atitit.web 推送实现方案集合
atitit.web 推送实现方案集合
2.3. 提供连接上线前、上线、下线前、下线、发送消息等多种可处理事件。
2.4. 消息缓存机制。确保长轮询工作模式下不丢失消息。 2
2.6. client异常停止工作,服务端可定时检查并感知。
2.7. 以注冊通道应用的方式。让开发人员对框架功能进行扩展。实现自己的应用。 2
3. client实现::长轮询(简单轮询,长轮询,HTTP 流)、长连接、自己主动选择三种工作模式 3
4. 服务端的信息实现(点对点,公布/订阅)。JMS 消息系统 4
须要Flash XMLSocket、Java Applet 等插件支持 7
1. 俩中模式 Push/Pull
server推送(Server Push) 推送技术的基础思想是将浏览器主动查询信息改为server主动发送信息。server发送一批数据,浏览器显示这些数据。同一时候保证与server的连接。
当server须要再次发送一批数据时,浏览器显示数据并保持连接。以后。server仍然能够发送批量数据,浏览器继续显示数据,依次类推。 client拉曳(Client Pull) 在
作者:: 老哇的爪子 Attilax 艾龙, EMAIL:1466519819@qq.com
转载请注明来源: http://blog.csdn.net/attilax
2. 须要实现的特性
功能特性
2.1. 推送消息广播。
2.2. 推送定向消息。
2.3. 提供连接上线前、上线、下线前、下线、发送消息等多种可处理事件。
2.4. 消息缓存机制,确保长轮询工作模式下不丢失消息。
2.5. client正常下线,服务端可马上感知。
2.6. client异常停止工作,服务端可定时检查并感知。
2.7. 以注冊通道应用的方式,让开发人员对框架功能进行扩展。实现自己的应用。
3. client实现::长轮询(简单轮询。长轮询。HTTP 流)、长连接、自己主动选择三种工作模式
3.1. HTTP 请求轮询
眼下的 Web 应用是基于 HTTP 协议的。其规定了请求-响应的处理模型,位于应用层的单工通讯模式使得纯粹意义上的服务端推送方式变得难以实现。
为了基于 HTTP 协议进行“推送”实现。可由client发起 HTTP 请求轮询,服务端在请求后返回响应。
依据轮询时间、请求处理方式。分为下面三种推。
3.2. 简单轮询
client一般以定时方式发起请求,服务端处理后返回响应。
● 原理、client/服务端实现简单
● 可依据应用场景调整轮询时间间隔
● 服务端须要处理大量请求
3.3. 长轮询
client发起请求后服务端将该请求挂起(不返回响应),直到超时、异常或须要处理响应(推内容)才返回。client收到响应后再次请求(即轮询)服务端。并处理响应。
● 实时性高
● 服务端须要管理挂起请求
3.4. HTTP 流
client发起请求后server端处理请求,并通过 HTTP 流一直向client写入数据,直到超时或异常才返回响应。连接断开后client再次请求服务端。属于长轮询的一种。
4. 服务端的信息实现(点对点。公布/订阅)。JMS 消息系统
消息是系统或组件间通讯的一种低耦合方式。是系统级异步架构的基础。
在 Web 消息推送中,服务端管理应用状态,当状态发生变迁时须要通知client。完毕消息推送。
4.1. Pushlets 组件
4.2. Java Message Service
须要重点关注例如以下技术点:
消息域
● 点对点
仅仅有一个client能够接收到消息。
● 公布/订阅
广播给订阅的client。可配置持久化订阅。
消息确认
● 会话本地事务提交时会对收到的消息进行确认,回滚时将重传全部消息
● 非本地事务确认:Session.AUTO_ACKNOWLEDGE、Session.CLIENT_ACKNO、Session.DUPS_OK_ACKNOWLEDGE
4.3. 逻辑架构
JMS 消息系统为单独的通讯总线服务独立于应用系统。Pushlets 为应用系统中的一个组件。
消息表管理组件提供消息新增。以及对推送过的消息记录的查询、删除。
推时序
关键点
● 服务层消息处理
JMS 对于应用开发是透明的,应用仅仅需调用封装好的发送接口,继承监听接口。发送时依据应用场景设置主题属性,监听处理时依据消息属性实现处理逻辑。
● 消息表管理
须要使用定时任务或手动触发清除历史消息。
● Pushlets 配置,License 问题:Pushlets 是以 LGPL 开源的。对于商业项目使用时必须进行封装:《基于 Pushlets 的消息推送设计》。
5. 解决方式总结
5.1. 云方案(推荐)::百度云?极光?个推?
作为Android开发人员,在做应用开发时我们经常会碰到消息推送。由于Android不像苹果,本身没有消息推送机制,通常採用的是基于XMPP协议 的推送,但这样的开发非常麻烦,因此在市场上应运而生了一种封装好的推送方式:极光推送。它的出现大大节省了开发时间,极光推送一度占据移动开发的市场,可是 近期,百度推出了新的推送方式:百度云推送,在市场的反应也相当不错。作为开发人员,有时候不知道选择哪一种方式的推送合适,以下就将具体介绍下这两者的区 别和优势,希望你能从中找到答案。
5.2. socket。。
须要Flash XMLSocket、Java Applet 等插件支持
能够使用套接字接口进行全双工通讯。能够通过 Flash XMLSocket、Java Applet 技术实现。
但因为实现方案与厂商技术绑定过紧。不属于 Web 标准化范畴。而且存在一些限制(通讯port开启安全、client插件),这里不进行描写叙述。
5.3. mina自己socket实现
5.4. websocket html5
5.5. Comet4J
是一个微型的即时推送框架。它分为服务端 与client两部分,你仅仅要将server端(JAR文件。眼下仅支持Tomcat6、7)放入WEB-INF\lib,client(JavaScript文件)引入到 页面,那么你的应用就具备了向client推送信息的能力,而你仅须要在server端调用Comet4J所提供发送方法,信息就会被主动的推送到客户的浏览器上。
Comet4J眼下仅支持Tomcat6、7版本号,依据您所使用的Tomcat版本号下载【comet4j-tomcat6.jar】或【comet4j-tomcat7.jar】文件放置到WEB项目的WEB-INF\lib文件夹下
omet4J(Comet for Java)是一个纯粹基于AJAX(XMLHTTPRequest)的server推送框架。消息以JSON方式传递,具备长轮询、长连接、自己主动选择三种工作模式
6. 工作模式浏览器支持情况
支持XMLHTTPRequest对象的浏览器均可支持长轮询工作模式。但不一定可以支持长连接。
浏览器/平台 |
版本号 |
长轮询 |
长连接 |
Internet Explorer |
6,7,8,9 |
√ |
X |
FireFox |
3.0+(更底版本号未知) |
√ |
√ |
Chrome |
7.0+(更底版本号未知) |
√ |
√ |
Safari |
5+(更底版本号未知) |
√ |
√ |
Opera |
11.10+(更底版本号未知) |
√ |
X |
Air |
1.5+(更底版本号未知) |
√ |
√ |
IOS(Iphone/Ipad) |
3.1+(更底版本号未知) |
√ |
√ |
Android |
未測试 |
未知 |
未知 |
BlackBerry |
未測试 |
未知 |
未知 |
7. 參考
comet4j java服务端推送消息到web页面实例 - shadowsick的专栏 - 博客频道 - CSDN.NET.htm
消息推送机制技术设计_百度文库.htm
百度云?极光?个推? - 51CTO.COM.htm