消息推送技术

消息推送技术 
 
消息推送技术 
消息推送 
Web 层消息推送 
套接字 
HTTP 请求轮询 
简单轮询 长轮询 HTTP 流 
HTML 5 WebSocket 多客户端支持 
APIs 多样 
网络连接不稳定 最小化流量 
服务层消息服务 
Java Message Service 
消息域 消息确认 
技术设计 
目标 
Web 层设计 
Pushlets 组件 JS 客户端 服务层设计 
处理步骤 消息表 逻辑架构 
推时序 关键点 参考  
消息推送 
消息推送是针对 Web 应用开发领域的技术,指服务端以主动方式将信息送达客户端。主要用于
提升用户体验,避免用户刷新页面从服务端拉取数据。例如 Web 邮件中自动出现刚收到的邮件项,Web 即时通讯自动提示新到消息等应用场景。 




       
 




 
要实现消息推送机制,涉及两方面的内容: 
● Web 层消息推送 ● 服务层消息服务 
Web 层消息推送 
套接字 
可以使用套接字接口进行全双工通讯。可以通过 Flash XMLSocket、Java Applet 技术实现。 但由于实现方案与厂商技术绑定过紧,不属于 Web 标准化范畴,并且存在一些限制(通讯端口开启安全、客户端插件),这里不进行描述。 
HTTP 请求轮询 
目前的 Web 应用是基于 HTTP 协议的,其规定了请求-响应的处理模型,位于应用层的单工通讯模式使得纯粹意义上的服务端推送方式变得难以实现。  
为了基于 HTTP 协议进行“推送”实现,可由客户端发起 HTTP 请求轮询,服务端在请求后返回响应。  
根据轮询时间、请求处理方式,分为以下三种推。 
简单轮询 
客户端一般以定时方式发起请求,服务端处理后返回响应。 
● 原理、客户端/服务端实现简单 ● 可根据应用场景调整轮询时间间隔 ● 服务端需要处理大量请求 
 






 




长轮询 
客户端发起请求后服务端将该请求挂起(不返回响应),直到超时、异常或需要处理响应(推内容)才返回。客户端收到响应后再次请求(即轮询)服务端,并处理响应。 
● 实时性高 
● 服务端需要管理挂起请求 
 
HTTP 流 
客户端发起请求后服务器端处理请求,并通过 HTTP 流一直向客户端写入数据,直到超时或异常才返回响应。连接断开后客户端再次请求服务端,属于长轮询的一种。 






 




 
HTML 5 WebSocket 
这是标准化的客户端全双工通讯规范,但由于目前服务端规范尚未成型,且考虑到现有客户端对 HTML 5 的支持有限,这里不进行描述。 
多客户端支持 
上述介绍是针对浏览器客户端的,在实际应用场景中,还需要考虑其他客户端支持,例如 iOS、Android 等。  
在移动客户端方面,需要考虑如下几点。 APIs 多样 
不同客户端本地 APIs 接口存在差异,但都支持基本的 HTTP 协议。直接基于 HTTP 协议进行开发可将差异最小化。 
网络连接不稳定 
通讯信道打开后不一定能长时间维护,客户端与服务端的状态管理复杂。 
最小化流量 
需要尽量最小化网络流量,提升移动客户端可用性。 






 




服务层消息服务 
消息是系统或组件间通讯的一种低耦合方式,是系统级异步架构的基础。  
在 Web 消息推送中,服务端管理应用状态,当状态发生变迁时需要通知客户端,完成消息推送。 
Java Message Service 
需要重点关注如下技术点: 
消息域 
● 点对点 
只有一个客户端可以接收到消息。 
 
● 发布/订阅 
广播给订阅的客户端。可配置持久化订阅。 
 
消息确认 
● 会话本地事务提交时会对收到的消息进行确认,回滚时将重传所有消息 ● 非本地事务确认:Session.AUTO_ACKNOWLEDGE、
Session.CLIENT_ACKNOWLEDGE、Session.DUPS_OK_ACKNOWLEDGE 
技术设计 
目标 
● 支持浏览器客户端的推送 






 










 










 










 



  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值