comet4j 推送技术

java 使用 comet4j 主动向客户端推送信息

【背景】

  才来公司不久,让我独立开发站内信,站内邮件,以及文件传输功能;在自己认知的java技术中筛选,又一次死了不少脑细胞,刷新实现,MQ实现,推送实现,只是粗略的概念化,和思想懂,时限性最好的当然要属comet4j;决定耐心认真滴研究一次comet4j;

  关于comet技术介绍及其实现原理,可以参考网站 http://www.ibm.com/developerworks/cn/web/wa-lo-comet/ 的介绍。

  简单来说,就是客户端发送请求到服务端,服务器端会阻塞请求直到有数据传递或超时才返回,之后客户端 JavaScript 响应处理函数会在处理完服务器返回的信息后,再次发出请求,重新建立连接。当客户端处理接收的数据、重新建立连接时,服务器端可能有新的数据到达;这些信息会被服务器端保存直到客户端重新建立连接,客户端会一次把当前服务器端所有的信息取回。  

 

【工作环境】

1、IDEA2018

2、tomcat 6.0

3、jdk 8_7u2

4、谷歌浏览器

说明 

测试成功的浏览器有:(1)火狐浏览器  (2)IE10、IE9、IE8  (3)360极速浏览器极速模式

测试失败的浏览器有:(1)IE10兼容模式、IE7

  

【准备工作】

1、下载comet4j.js  :http://files.cnblogs.com/xiaoMzjm/comet4j.js.rar

2、下载comet4j-tomcat6.jar  :http://files.cnblogs.com/xiaoMzjm/comet4j-tomcat6.jar.rar

3、到tomcat目录下——conf——server.xml 下,把

    <Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />

修改成

<Connector URIEncoding="UTF-8" 
    connectionTimeout="20000"
     port="8080"  
     protocol="org.apache.coyote.http11.Http11NioProtocol"
     redirectPort="8443"
/>  

说明: 

其实那个js文件和jar官网是https://code.google.com/p/comet4j/ 的,但它是谷歌,这里是天朝呐,所以贴了两个我文件夹里面的包的地址上来。    

comet4j-tomcat6.jar 还有另一个版本是 comet4j-tomcat7.jar , 自己选择合适的版本去下载。6以下的tomcat肯定不行就对了。

comet4j.js 的官方使用文档: http://doc.comet4j.tk/jsdocs/

comet4j-tomcat6.jar 的官方使用文档:   http://doc.comet4j.tk/apidocs/

  

【新建项目过程】

(1)新建服务端的类TestComet , 实现  ServletContextListener  接口

(2)在web.xml 里面应该配置 拦截器:

复制代码
    <listener>
        <listener-class>org.comet4j.core.CometAppListener</listener-class>
    </listener>
    <listener>
        <description>HelloWorld</description>
        <listener-class>com.zjm.www.test.TestComet</listener-class>
    </listener>
    <servlet>
        <display-name>CometServlet</display-name>
        <servlet-name>CometServlet</servlet-name>
        <servlet-class>org.comet4j.core.CometServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>CometServlet</servlet-name>
        <url-pattern>/conn</url-pattern>
    </servlet-mapping>
复制代码

 

:其中的要配置的有两个地方

一个是comet4j-tomcat6.jar下的一个servlet:org.comet4j.core.CometServlet , 客户端访问的入口

另一个是comet4j-tomcat6.jar下的监听器:org.comet4j.core.CometAppListener , 监听我们自己的类。

 

【具体代码(说明都写在注释里面)】

1、web.xml

  View Code

 

2、java类TestComet

里面附上了不少的注释,如果想仔细研究建议看上面的赋予的API文档链接。

  View Code

 

3、客户端代码

  View Code

 

 4、网页显示

数字1:2221

数字2:2321 

可以看出,两个数字不停地每秒递增。数字2比数字1 多了100,因为在服务端,number2的初始值为100,number1的初始值为0。

在浏览器上按F12,选择netWork,如下图,可以看出,此连接从未断开过。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Comet4J(Comet for Java)是一个纯粹基于AJAX(XMLHTTPRequest)的服务器推送框架,消息以JSON方式传递,具备长轮询、长连接、自动选择三种工作模式。 功能特性 推送消息广播。 推送定向消息。 提供连接上线前、上线、下线前、下线、发送消息等多种可处理事件。 消息缓存机制,确保长轮询工作模式下不丢失消息。 客户端正常下线,服务端可立即感知。 客户端异常停止工作,服务端可定时检查并感知。 以注册通道应用的方式,让开发者对框架功能进行扩展,实现自己的应用。 框架特性 独立小巧,不依赖于第三方包。 与应用紧密集成,无需独立应用或服务器。 与Session无关的连接机制,为开发人员提供最大程度的功能可控性。 面向事件编程,客户端与服务器端均为事件驱动开发模式,提供了良好的可扩展性机制。 各项性能参数均可配置。 支持多种主流浏览器,并支持Air应用环境。 服务器支持情况 Tomcat6、Tomcat7 浏览器支持情况 支持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 | 未测试 | 未知 | 未知 |
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值