Java中使用Comet4j实现服务器推送实现时报错

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天半的时间才全部解决。希望能对有需要的朋友提供一点参考!!


追加内容:

  1. <!-- Comet4J可选参数配置-->  
  2. <context-param>  
  3.         <description>语言[支持:zh,en,默认:zh,详细http://www.loc.gov/standards/iso639-2/php/English_list.php]</description>  
  4.         <param-name>Comet.Language</param-name>  
  5.         <param-value>zh</param-value>  
  6. </context-param>  
  7. <context-param>  
  8.         <description>请求超时时间/微妙[默认:60000,1分钟,建议至少设置3秒以上]</description>  
  9.         <param-name>Comet.Timeout</param-name>  
  10.         <param-value>60000</param-value>  
  11. </context-param>  
  12. <context-param>  
  13.         <description>连接空闲过期时间/微妙[默认:5000,5秒]</description>  
  14.         <param-name>Comet.ConnExpires</param-name>  
  15.         <param-value>5000</param-value>  
  16. </context-param>  
  17. <context-param>  
  18.         <description>连接检查频率/微妙[默认:5000,5秒]</description>  
  19.         <param-name>Comet.ConnFrequency</param-name>  
  20.         <param-value>5000</param-value>  
  21. </context-param>  
  22. <context-param>  
  23.         <description>缓存信息过期时间/微妙[默认:60000,1分种]</description>  
  24.         <param-name>Comet.CacheExpires</param-name>  
  25.         <param-value>60000</param-value>  
  26. </context-param>  
  27. <context-param>  
  28.         <description>缓存信息过期检查频率/微妙[默认:60000,1分种]</description>  
  29.         <param-name>Comet.CacheFrequency</param-name>  
  30.         <param-value>60000</param-value>  
  31. </context-param>  
  32. <context-param>  
  33.         <description>连接模式[auto(默认)/stream/lpool]</description>  
  34.         <param-name>Comet.WorkStyle</param-name>  
  35.         <param-value>auto</param-value>  
  36. </context-param>  
  37. <context-param>  
  38.         <description>开启调试[false(默认)/true]</description>  
  39.         <param-name>Comet.Debug</param-name>  
  40.         <param-value>false</param-value>  
  41. </context-param>


发布了43 篇原创文章 · 获赞 39 · 访问量 6万+

猜你喜欢

转载自blog.csdn.net/yy339452689/article/details/77850544
今日推荐