最近一个项目,需要用jetty(6.24)+DWR(2.06)实时push数据,在内网测试环境该请求/dwr/call/plainpoll/ReverseAjax.dwr
按默认的1分钟刷新一次长连接,可一配置到外网的服务器上,开始是按1分钟刷新,过一段时间就变成1秒刷新一次了,换一台外网的服务器部署,依然是同样的问题。
     不知谁遇到过类似的问题,或知道如何去设置长连接刷新的时间间隔(网上搜了很多资料,许多次尝试后没见生效)。     以下是web.xml关于dwr的配置: <servlet>
  <servlet-name>dwr-invoker</servlet-name>
  <servlet-class>org.directwebremoting.servlet.DwrServlet</servlet-class>
  <init-param>
    <param-name>activeReverseAjaxEnabled</param-name>
    <param-value>true</param-value>
  </init-param>
  <init-param> 
     <param-name>initApplicationScopeCreatorsAtStartup</param-name> 
     <param-value>true</param-value> 
  </init-param> 
  <init-param>
    <param-name>maxWaitAfterWrite</param-name>
    <param-value>-1</param-value>
  </init-param>
  <init-param>
  <param-name>disconnectedTime</param-name>
  <param-value>180000</param-value>
  </init-param> </servlet>

解决方案 »

  1.   


    实际上,假设你使用一个名为disconnectedTime的参数,但是由于2.0.2版本之前的DWR存在一个错误,
    因此必须使用timeToNextPoll。要记住,如果升级DWR版本,没有正常使用参数,应用程序可能会失效。在js页面端加上下面一句就可以了:
    dwr.engine.setActiveReverseAjax(true);
      

  2.   

    这是DWR的bug,对jetty服务器的判断失误所致。
    org.directwebremoting.impl.ContainerUtil: public static void setupDefaults(DefaultContainer container, ServletConfig servletConfig) throws InstantiationException, IllegalAccessException
        {
            ........  if (servletConfig.getServletContext().getServerInfo().startsWith("jetty_"))
       
      //应为.startsWith("jetty"))
            .......
        }