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
2、java类TestComet
里面附上了不少的注释,如果想仔细研究建议看上面的赋予的API文档链接。
3、客户端代码
4、网页显示
数字1:2221
数字2:2321
可以看出,两个数字不停地每秒递增。数字2比数字1 多了100,因为在服务端,number2的初始值为100,number1的初始值为0。
在浏览器上按F12,选择netWork,如下图,可以看出,此连接从未断开过。