消息推送技术Push

1)服务器端推送的实现

接下来就大概说说服务器推送技术
服务器在响应请求时,HTTP使用MIME报文格式来封装数据。通常一个HTTP响应只能包含一个数据块。但MIME有一种机制可用一个报文(或HTTP 响应)表示将多个数据块,这种机制就是成为“multipart/mixed”的标准MIME类型。
对于服务器推送,使用一个“multipart/mixed”类型的变种–multipart/x-mixed-replace。这里,“x-”表示属于实验类型。“replace”表示每一个新数据块都会代替前一个数据块。也就是说,新数据不是附加到旧数据之后,而是替代它。


2)

目前据我所知,Servlet 2.5标准没有规定Server Push,即Asynchronous的API。所以各个不同的Java EE服务器都有自己的不同标准。

1. Tomcat servlet container中,用CometEvent的class来实现,而且一个Servlet class必须首先implement CometProcessor这个interface。
例子和讲解,是Apache官方的!http://tomcat.apache.org/tomcat-6.0-doc/aio.html

2. Resin服务器,也就是校内网用的服务器。大概是用com.caucho.servlet.cometCometController来实现。
http://www.caucho.com/resin/doc/resin-comet.xtp是官方的教程

3. WebSphere,也就是IBM的application server,是价格最贵的。可以用WebSphere Application Server Feature Pack for Web 2.0。
中文教程:http://www.ibm.com/developerworks/cn/web/wa-lo-w2fpak-comet/

4.甲骨文的WebLogic好像也有,不过没找到教程。

5、开源而又能和各种服务器良好兼容,那就是Pushlet。感觉他们源代码写的水平有限,当然是和Apache的源代码相比。
教程http://www.pushlets.com/。

在未来Servlet 3.0 API标准中,规定了Asynchronous Event,也就是对Server Push的支持。
http://jcp.org/aboutJava/communityprocess/edr/jsr315/index.html
目前我只知道未来的Tomcat 7一定会遵循Servlet 3.0标准。

文章
http://baike.baidu.com/view/2668625.htm
http://hi.baidu.com/zhenyk/blog/item/02a9d21f652d2765f724e47e.html
Tools
http://en.wikipedia.org/wiki/Comet_(programming)
http://www.ibm.com/developerworks/cn/web/wa-lo-comet/

工具
http://cometdproject.dojotoolkit.org/
http://groups.google.com/group/cometd-dev/


在Tomcat 6中,增加了对Comet的支持


 Tomcat 6提供了CometProcessor和CometEvent接口,实现CometProcessor接口后不用在servlet中写doGet,doPoset方法,所有事件在BEGIN,READ,END,ERROR中实现。

CometProcessor 接口要求实现 event 方法。这是用于 Comet 交互的一个生命周期方法。Tomcat 将使用不同的 CometEvent 实例调用。通过检查 CometEvent 的 eventType,可以判断正处在生命周期的哪个阶段。当请求第一次传入时,即发生 BEGIN 事件。READ 事件表明数据正在被发送,只有当请求为 POST 时才需要该事件。遇到 END 或 ERROR 事件时,请求终止。


CometProcessor和CometEvent的技术文档
http://qujunxi.iteye.com/blog/1021687

Tomcat的comet原理其实同样很简单,它无非就是做了一件事情,它允许 servlet执行完毕后的response没有被回收,我们只要拿到这个Reponse的引用并保存起来,就可以随时从Server向Client端Push 数据了。每个连接一个线程的模型便非常简单。该模型对于 Comet 不大适用,但是,Java 对此同样有解决的办法。为了有效地处理 Comet,需要非阻塞 IO,Java 通过它的 NIO 库提供非阻塞 IO。两种最流行的开源服务器 Apache Tomcat 和 Jetty 都利用 NIO 增加非阻塞 IO,从而支持 Comet.

import org.apache.catalina.CometEvent;
import org.apache.catalina.CometProcessor;
CometAsyncFilter
CometRequestHandler
CometHandler

服务器推送技术java
http://duyouhua1214.iteye.com/blog/558204






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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值