atitit.web 推送实现方案集合
atitit.web 推送实现方案集合
2.3. 提供连接上线前、上线、下线前、下线、发送消息等多种可处理事件。 2
2.4. 消息缓存机制,确保长轮询工作模式下不丢失消息。 2
2.7. 以注册通道应用的方式,让开发者对框架功能进行扩展,实现自己的应用。 2
3. 客户端实现::长轮询(简单轮询,长轮询,HTTP 流)、长连接、自动选择三种工作模式 3
4. 服务端的信息实现(点对点,发布/订阅),JMS 消息系统 4
5.2. socket。。需要Flash XMLSocket、Java Applet 等插件支持 7
1. 俩中模式 Push/Pull
服务器推送(Server Push) 推送技术的基础思想是将浏览器主动查询信息改为服务器主动发送信息。服务器发送一批数据,浏览器显示这些数据,同时保证与服务器的连接。当服务器需要再次发送一批数据时,浏览器显示数据并保持连接。以后,服务器仍然可以发送批量数据,浏览器继续显示数据,依次类推。 客户端拉曳(Client Pull) 在
作者:: 老哇的爪子 Attilax 艾龙, EMAIL:1466519819@qq.com
转载请注明来源: http://blog.csdn.net/attilax
2. 需要实现的特性
功能特性
2.1. 推送消息广播。
2.2. 推送定向消息。
2.3. 提供连接上线前、上线、下线前、下线、发送消息等多种可处理事件。
2.4. 消息缓存机制,确保长轮询工作模式下不丢失消息。
2.5. 客户端正常下线,服务端可立即感知。
2.6. 客户端异常停止工作,服务端可定时检查并感知。
2.7. 以注册通道应用的方式,让开发者对框架功能进行扩展,实现自己的应用。
3. 客户端实现::长轮询(简单轮询,长轮询,HTTP 流)、长连接、自动选择三种工作模式
3.1. HTTP 请求轮询
目前的 Web 应用是基于 HTTP 协议的,其规定了请求-响应的处理模型,位于应用层的单工通讯模式使得纯粹意义上的服务端推送方式变得难以实现。
为了基于 HTTP 协议进行“推送”实现,可由客户端发起 HTTP 请求轮询,服务端在请求后返回响应。
根据轮询时间、请求处理方式,分为以下三种推。
3.2. 简单轮询
客户端一般以定时方式发起请求,服务端处理后返回响应。
● 原理、客户端/服务端实现简单
● 可根据应用场景调整轮询时间间隔
● 服务端需要处理大量请求
3.3. 长轮询
客户端发起请求后服务端将该请求挂起(不返回响应),直到超时、异常或需要处理响应(推内容)才返回。客户端收到响应后再次请求(即轮询)服务端,并处理响应。
● 实时性高
● 服务端需要管理挂起请求
3.4. HTTP 流
客户端发起请求后服务器端处理请求,并通过 HTTP 流一直向客户端写入数据,直到超时或异常才返回响应。连接断开后客户端再次请求服务端,属于长轮询的一种。
4. 服务端的信息实现(点对点,发布/订阅),JMS 消息系统
消息是系统或组件间通讯的一种低耦合方式,是系统级异步架构的基础。
在 Web 消息推送中,服务端管理应用状态,当状态发生变迁时需要通知客户端,完成消息推送。
4.1. Pushlets 组件
4.2. Java Message Service
需要重点关注如下技术点:
消息域
● 点对点
只有一个客户端可以接收到消息。
● 发布/订阅
广播给订阅的客户端。可配置持久化订阅。
消息确认
● 会话本地事务提交时会对收到的消息进行确认,回滚时将重传所有消息
● 非本地事务确认: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 标准化范畴,并且存在一些限制(通讯端口开启安全、客户端插件),这里不进行描述。
5.3. mina自己socket实现
5.4. websocket html5
5.5. Comet4J
是一个微型的即时推送框架,它分为服务端 与客户端两部分,你只要将服务器端(JAR文件,目前仅支持Tomcat6、7)放入WEB-INF\lib,客户端(JavaScript文件)引入到 页面,那么你的应用就具备了向客户端推送信息的能力,而你仅需要在服务器端调用Comet4J所提供发送方法,信息就会被主动的推送到客户的浏览器上。
准备工作
下载服务端jar文件
Comet4J目前仅支持Tomcat6、7版本,根据您所使用的Tomcat版本下载【comet4j-tomcat6.jar】或【comet4j-tomcat7.jar】文件放置到WEB项目的WEB-INF\lib目录下
omet4J(Comet for Java)是一个纯粹基于AJAX(XMLHTTPRequest)的服务器推送框架,消息以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
atitit.web 推送实现方案集合的更多相关文章
- atitit.web 推送实现方案集合(2)---百度云,jpush 极光推送 ,个推的选型比较.o99
atitit.web 推送实现方案集合(2)---百度云,jpush 极光推送 ,个推的选型比较.o99 1.1. 云推送有推送次数或频率的限制吗? 1 1.2. 推送的消息长度 1 1.3. 离线消 ...
- .atitit.web 推送实现解决方案集合(3)----dwr3 Reverse Ajax
.atitit.web 推送实现解决方案集合(3)----dwr3 Reverse Ajax 1. 原理实现 1 2. Page 增加配置,增加回调函数dwr.engine.setActiveRev ...
- .atitit.web 推送实现解决方式集合(3)----dwr3 Reverse Ajax
.atitit.web 推送实现解决方式集合(3)----dwr3 Reverse Ajax 1. 原理实现 1 2. Page 添加配置.添加回调函数dwr.engine.setActiveRev ...
- Android消息推送完美方案[转]
转自 Android消息推送完美方案 推送功能在手机应用开发中越来越重要,已经成为手机开发的必须.在Android应用开发中,由于众所周知的原因,Android消息推送我们不得不大费周折.本文就是用来 ...
- Android消息推送完美方案
转自:http://bbs.hiapk.com/thread-4652657-1-1.html 推送功能在手机应用开发中越来越重要,已经成为手机开发的必须.在Android应用开发中,由于众所周知的原 ...
- JavaScript是如何工作的: Web推送通知的机制
摘要: 如何在Web端推送消息? 这是专门探索 JavaScript 及其所构建的组件的系列文章的第9篇. 如果你错过了前面的章节,可以在这里找到它们: JavaScript是如何工作的:引擎,运行时 ...
- Netty-SocketIO的Web推送实战应用
netty-socketio是一个开源的Socket.io服务器端的一个java的实现, 它基于Netty框架.可应用于服务端主动推送消息到客户端等场景,比如说股票价格变化.k线图的走势,和webso ...
- IM推送保障及网络优化详解(二):如何做长连接加推送组合方案
对于移动APP来说,IM功能正变得越来越重要,它能够创建起人与人之间的连接.社交类产品中,用户与用户之间的沟通可以产生出更好的用户粘性. 在复杂的 Android 生态环境下,多种因素都会造成消息推送 ...
- 我有 7种 实现web实时消息推送的方案,7种!
技术交流,公众号:程序员小富 大家好,我是小富- 我有一个朋友- 做了一个小破站,现在要实现一个站内信web消息推送的功能,对,就是下图这个小红点,一个很常用的功能. 不过他还没想好用什么方式做,这里 ...
随机推荐
- linux编译curl库的动态库so(转)
转载请注明出处:帘卷西风的专栏(http://blog.csdn.NET/ljxfblog) curl库是一个很强大的http开源库,c++里面能够很方便的和http服务器交互. 最近项目开始内测,开 ...
- TCP/ip协议栈之内核调优
大并发带来服务器各种层出不穷的问题,我们要善用服务器系统内核,因为其性能优于用户态的玩意 注:若想永久保存参数,可将其加入到/etc/sysctl.conf中,执行sysctl -p使其永久生效,临时 ...
- MyScript 手写识别数学公式、图形 自动计算
项目的地址 http://git.oschina.net/bimingcong/MyScript #说明:MyScript是一种能够自动识别用户在屏幕上的手势,然后转化为相应的数学公式.图形(比如三 ...
- 使用GITHUB的体会
github的网页链接 https://github.com/zhangji123/test 学习总结 通过学习使用github软件使我掌握了其使用方法及其独特之处 1.github的网址: htt ...
- JavaScript-setInterval-周期性行定时器-倒计时
<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...
- struts2中的constant配置详解
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts PUBLIC "-/ ...
- 自定义UISearchBar外观
1. 设置背景色 我以白色的背景色为例,下面看看代码: //1. 设置背景颜色 //设置背景图是为了去掉上下黑线 self.customSearchBar.backgroundImage = [[UI ...
- 从一个Fragment跳转到另一个Fragment
我们知道Activity之间的跳转可以使用 startActivity(intent).但Fragment之间的跳转却不能使用该方法,那该怎么办呢? 直接上代码: 核心代码 @Override//核心 ...
- 5.4-5.8webstorm css
关于使用css3 动画完成牛顿摆球效果: 使用的规则为@keyframes,不过目前的浏览器都不支持该规则. Firefox 支持替代的 @-moz-keyframes 规则. Opera 支持替代的 ...
- C# 正则表达式测试工具与分享窗体自适应类
放假刚回来,自己打算写一个正则表达式的测试工具,因为上次在网上用的一个在线正则表示测试工具就 没有很好的服务自己的,所以才有了现在的想法,想写一个C#开发者用的正则表达式测试工具!期间由于最大化时控件 ...