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消息推送的功能,对,就是下图这个小红点,一个很常用的功能. 不过他还没想好用什么方式做,这里 ...
随机推荐
- [2015hdu多校联赛补题]hdu5378 Leader in Tree Land
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5378 题意:给你一棵n个结点的有根树.因为是有根树,那么每个结点可以指定以它为根的子树(后面讨论的子树 ...
- Asp.net Session 保存到MySql中
一 网站项目引入"mysql.web.dll" 二 web.config配置中添加mysql数据库连接字符串 <connectionStrings> <remov ...
- ArcGIS删除部分数据后全图范围不正确
我有一个全国地图的图层,现在删除图层中其他省份,只保留山东省的图形,但是点击全图后,全图范围仍然是全国地图时候的全图范围,使用的版本是ArcGIS9.3,数据存放在9.3的个人数据库中(Perso ...
- Linux下守护进程初探
守护进程一直后台运行,与终端脱离,一般负责周期性地执行系统任务,服务器应用一般以守护进程进行运行.实现一个守护进程主要分为5部: 1.脱离父进程 2.setsid(可以选择再次fork) 3.umas ...
- jQuery阻止默认行为和阻止冒泡
1.阻止默认行为:通常是值一个标签的默认行为,如button的提交表单,a标签的跳转等. 那如何阻止标签的默认行为? 1)return false 2) e.preventDefault(); < ...
- Cacti的基本使用
对于Cacti是通过snmpget来获取数据,使用 RRDtool绘画图形,用snmp服务获取数据,然后用rrdtool储存和更新数据,那么就可以简单理解为Cacti就是RRDTool的一个web图形 ...
- Centos7 Apache 2.4.18编译安装
安装环境:CentOS Linux release 7.0.1406 (Core) 0x01 到官网http://httpd.apache.org/download.cgi#apache24下载apa ...
- 使用 IntraWeb (39) - THttpRequest、THttpReply
在其它服务器脚本语言中熟悉的 Request.Response(THttpRequest.THttpReply) 在 IntraWeb 中算是幕后英雄了, 用户基本不需要直接操作它们了. IW 默认 ...
- [linux] 线程和wait命令,sleep命令
在linux脚本编程中使用多线程编程,其中wait命令可以实现shell的多线程同步控制. 1. 启动后台子任务 在执行命令后加&操作符,表示将命令放在子shell中异步执行.可以达到多线程效 ...
- C# winform 代码生成
http://www.cnblogs.com/luomingui/archive/2012/09/02/2667217.html 双鱼林: http://www.crsky.com/soft/4941 ...