1.准备所需包
首先,在使用comet4j之前,需要下载comet4j-tomcat7.jar 和 comet4j.js(这里需要注意jar包分tomcat7,所以这个jar版本必须与我们使用的tomcat版本相同);
2.易错点
①首先确定自己的tomcat版本,因为目前comet4j只支持tomcat6 和 tomcat7两个版本,切记!!(本人因之前用的tomcat8,报错纠结很久)
②其次,tomcat版本符合以后,记得改正tomcat的conf文件夹中的server.xml文件。
将原来的设置:<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />
改为<Connector URIEncoding="UTF-8" port="8080" connectionTimeout="20000" protocol="org.apache.coyote.http11.Http11NioProtocol" redirectPort="8443" />
否则使用时,可能会出现 405报错。
③再就是web.xml文件中的配置,如下:
<!-- Spring监听器 -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!-- 防止Spring内存溢出监听器 -->
<listener>
<listener-class>org.springframework.web.util.IntrospectorCleanupListener</listener-class>
</listener>
<listener>
<listener-class>org.comet4j.core.CometAppListener</listener-class>
</listener>
<!-- 此处配置为监听我们后台自己继承实现的推送类配置 -->
<listener>
<listener-class>com.cams.controller.PersonMsgController.Comet4jTest</listener-class>
</listener>
<!-- 此处配置为我们前台接收数据入口 -->
<servlet>
<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>
此处需要注意的是最后这个入口配置路径,默认是/conn指的是根目录下的路径,所以路径如果配置不对,可能会出现404报错。
④最后就是在后台自动推送数据时可能出现
GET http://localhost:8080/cams/conn?cmd=drop&cid=99beec6d-4fd6-48bd-8e38-d60f9188b5da&ram=0.6897574292497455 500 JSON格式转换异常 等错误。
本人就出现过如下图的错误:
错误原因:是我后台推送的数据是一个集合,以List形式推送到前台的。在前台接收时,出现了格式转换异常。但我自己发现在IE11中没有出现这种错误,但在谷歌Chrome 和 360急速浏览器都出现了这种报错。
解决办法:统一数据的推送和接收格式都为JSON格式。即在后台将推送数据转换成JSON格式,前台接收时以eval()转换使用。
以上为本人在使用comet4j时所碰到的所有问题,花了将近1天半的时间才全部解决。希望能对有需要的朋友提供一点参考!!
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
追加内容:
- <!-- Comet4J可选参数配置-->
- <context-param>
- <description>语言[支持:zh,en,默认:zh,详细http://www.loc.gov/standards/iso639-2/php/English_list.php]</description>
- <param-name>Comet.Language</param-name>
- <param-value>zh</param-value>
- </context-param>
- <context-param>
- <description>请求超时时间/微妙[默认:60000,1分钟,建议至少设置3秒以上]</description>
- <param-name>Comet.Timeout</param-name>
- <param-value>60000</param-value>
- </context-param>
- <context-param>
- <description>连接空闲过期时间/微妙[默认:5000,5秒]</description>
- <param-name>Comet.ConnExpires</param-name>
- <param-value>5000</param-value>
- </context-param>
- <context-param>
- <description>连接检查频率/微妙[默认:5000,5秒]</description>
- <param-name>Comet.ConnFrequency</param-name>
- <param-value>5000</param-value>
- </context-param>
- <context-param>
- <description>缓存信息过期时间/微妙[默认:60000,1分种]</description>
- <param-name>Comet.CacheExpires</param-name>
- <param-value>60000</param-value>
- </context-param>
- <context-param>
- <description>缓存信息过期检查频率/微妙[默认:60000,1分种]</description>
- <param-name>Comet.CacheFrequency</param-name>
- <param-value>60000</param-value>
- </context-param>
- <context-param>
- <description>连接模式[auto(默认)/stream/lpool]</description>
- <param-name>Comet.WorkStyle</param-name>
- <param-value>auto</param-value>
- </context-param>
- <context-param>
- <description>开启调试[false(默认)/true]</description>
- <param-name>Comet.Debug</param-name>
- <param-value>false</param-value>
- </context-param>