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 生态环境下,多种因素都会造成消息推送 ...
-
基于netty-socketio的web推送服务
实时消息的推送,PC端的推送技术可以使用socket建立一个长连接来实现.传统的web服务都是客户端发出请求,服务端给出响应.但是现在直观的要求是允许特定时间内在没有客户端发起请求的情况下服务端主动推 ...
随机推荐
-
python数据结构与算法——哈希表
哈希表 学习笔记 参考翻译自:<复杂性思考> 及对应的online版本:http://greenteapress.com/complexity/html/thinkcomplexity00 ...
-
浏览器userAgent大全
iPhone ●iOSMozilla/5.0 (iPhone; U; CPU like Mac OS X; en) AppleWebKit/420+ (KHTML, like Gecko) Versi ...
-
if语句写在while语句外面效率更高
为了排除某些特殊的文件后缀名,一开始我自然而然的这样写,判断每一个文件的后缀名: // 去除后缀名 foreach (const QString &strKey, local_map.keys ...
-
c语言技巧--长期更新
1. #define LOWER(c) (unsigned char)(c | 0x20) 换成小写 2. gcc -Wall -Werror //告警当成 错误来处理 ...
-
安全运维之:Linux系统账户和登录安全(转)
三.删减系统登录欢迎信息 系统的一些欢迎信息或版本信息,虽然能给系统管理者带来一定的方便,但是这些信息有时候可能被黑客利用,成为攻击服务器的帮凶,为了保证系统的安全,可以修改或删除某些系统文件,需要修 ...
-
python3抓图学习-百度贴吧
# coding=utf-8 from bs4 import BeautifulSoup import urllib.request import os import time def downlao ...
-
java jar 后台运行
nohup java -jar $APP_NAME.jar >/dev/null &
-
[POJ3197]Stall Reservations (贪心)
题意 (来自洛谷) 约翰的N(l<N< 50000)头奶牛实在是太难伺候了,她们甚至有自己独特的产奶时段.当 然对于某一头奶牛,她每天的产奶时段是固定的,为时间段A到B包括时间段A和时间段 ...
-
DDMS调试工具
ADT给我们提供了一个非常方便的调试工具,那就是DDMS.使用这个工具,代码调试工作也变得简单起来.我们只需要单击Eclipse界面右上方的DDMS按钮就可以切换到DDMS界面了,如图2-31所示. ...
-
解决Android启动显示空白界面的问题
Android程序启动时,第一个看的界面并不是我们的指定的第一个Activity界面,而是显示了一个空白的界面,带标题栏的,但是界面什么内容都没有,这个界面只显示不到1秒左右的时间就会切换到我们的第一 ...