Java 在长轮询的情况下,大气框架在服务器上引发错误

Java 在长轮询的情况下,大气框架在服务器上引发错误,java,atmosphere,atmosphere.js,Java,Atmosphere,Atmosphere.js,我想在我的应用程序中实现一个简单的推送机制。我使用的是Tomee1.7服务器,它使用Tomcat和其他一些包 对于Atmosphere,我使用Atmosphere runtime 2.4.3,而在客户端,我使用的是2.3.1版本 现在,当我尝试使用WebSocket推送时,情况对我来说很好,但当我尝试使用长轮询作为传输时,我在服务器上遇到以下错误: WARNING: Duplicate resource be43d07f-cbb4-412e-9d50-2d047a2e0223. Coul

我想在我的应用程序中实现一个简单的推送机制。我使用的是Tomee1.7服务器,它使用Tomcat和其他一些包

对于Atmosphere,我使用Atmosphere runtime 2.4.3,而在客户端,我使用的是2.3.1版本

现在,当我尝试使用WebSocket推送时,情况对我来说很好,但当我尝试使用长轮询作为传输时,我在服务器上遇到以下错误:

    WARNING: Duplicate resource be43d07f-cbb4-412e-9d50-2d047a2e0223. Could be caused by a dead connection not detected by your server. Replacing the old one with the fresh one
browser connected be43d07f-cbb4-412e-9d50-2d047a2e0223
Mar 10, 2016 11:56:36 AM org.atmosphere.cpr.AtmosphereFramework doCometSupport
SEVERE: AtmosphereFramework exception
java.lang.IllegalStateException: A filter or servlet of the current chain does not support asynchronous operations.
    at org.apache.catalina.connector.Request.startAsync(Request.java:1658)
    at org.apache.catalina.connector.RequestFacade.startAsync(RequestFacade.java:1029)
    at org.atmosphere.cpr.AtmosphereRequestImpl.startAsync(AtmosphereRequestImpl.java:623)
    at org.atmosphere.container.Servlet30CometSupport.suspend(Servlet30CometSupport.java:95)
    at org.atmosphere.container.Servlet30CometSupport.service(Servlet30CometSupport.java:70)
    at org.atmosphere.cpr.AtmosphereFramework.doCometSupport(AtmosphereFramework.java:2287)
    at org.atmosphere.cpr.AtmosphereServlet.doPost(AtmosphereServlet.java:191)
    at org.atmosphere.cpr.AtmosphereServlet.doGet(AtmosphereServlet.java:177)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:620)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
    at org.apache.catalina.filters.CorsFilter.handleSimpleCORS(CorsFilter.java:302)
    at org.apache.catalina.filters.CorsFilter.doFilter(CorsFilter.java:166)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)
    at org.apache.tomee.catalina.OpenEJBValve.invoke(OpenEJBValve.java:44)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:501)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
    at com.tradeweb.server.tools.valve.RequestHeaderCopyValve.invoke(RequestHeaderCopyValve.java:41)
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1070)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:611)
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:316)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    at java.lang.Thread.run(Thread.java:745)
在客户端上,我看到以下问题(对于chrome):

这是我的web.xml:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns="http://java.sun.com/xml/ns/javaee"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
    version="3.0">
    <display-name>Portfolio Analytics Integrator</display-name>
    <servlet>
        <servlet-name>AtmosphereServlet</servlet-name>
        <servlet-class>org.atmosphere.cpr.AtmosphereServlet</servlet-class>
        <load-on-startup>0</load-on-startup>
        <async-supported>true</async-supported>
    </servlet>
    <servlet-mapping>
        <servlet-name>AtmosphereServlet</servlet-name>
        <url-pattern>/notification/*</url-pattern>
    </servlet-mapping>
</web-app>

投资组合分析集成商
大气小卫星
org.atmosphere.cpr.AtmosphereServlet
0
真的
大气小卫星
/通知/*
在这里,我们可以看到我使用的是=true,但服务器仍然抱怨servlet不支持异步操作


我对大气比较陌生,所以无法了解这里的问题是什么。另外,当我在本地运行代码时,至少我可以通过WebSocket进行通信,但当我在服务器中部署代码时,atmosphere也无法使用WebSocket进行连接,并返回到长轮询,从而产生上述错误。当我在中间使用charles proxy时,我的本地服务器上也会发生同样的情况。

我已经解决了这个问题,看起来这是一个TomEE 1.7.0服务器错误。 TomEE服务器正在运行tomcat 7.0.55.0。以下是来自TOME的version.sh的输出:

 [web@DEVTWDLNX05 bin]$ ./version.sh
Using CATALINA_BASE:   /home/web/servers/apache-tomee-plus
Using CATALINA_HOME:   /home/web/servers/apache-tomee-plus
Using CATALINA_TMPDIR: /home/web/servers/apache-tomee-plus/temp
Using JRE_HOME:        /usr
Using CLASSPATH:       /home/web/servers/apache-tomee-plus/bin/bootstrap.jar:/home/web/servers/apache-tomee-plus/bin/tomcat-juli.jar
Server version: Apache Tomcat/7.0.55
Server built:   Jul 18 2014 05:34:04
Server number:  7.0.55.0
OS Name:        Linux
OS Version:     3.8.13-55.1.6.el7uek.x86_64
Architecture:   amd64
JVM Version:    1.7.0_75-mockbuild_2015_01_20_15_59-b00
JVM Vendor:     Oracle Corporation
当我在运行Tomcat7.0.68的Tomee1.7.4上运行代码时,一切都正常


令人费解的是,我也在普通的Tomcat 7.0.55.0上运行了相同的代码,代码运行得非常好,但当同一个Tomcat与TomEE服务器打包时,我们就出现了错误。

我已经解决了问题,看起来这是一个TomEE 1.7.0服务器错误。 TomEE服务器正在运行tomcat 7.0.55.0。以下是来自TOME的version.sh的输出:

 [web@DEVTWDLNX05 bin]$ ./version.sh
Using CATALINA_BASE:   /home/web/servers/apache-tomee-plus
Using CATALINA_HOME:   /home/web/servers/apache-tomee-plus
Using CATALINA_TMPDIR: /home/web/servers/apache-tomee-plus/temp
Using JRE_HOME:        /usr
Using CLASSPATH:       /home/web/servers/apache-tomee-plus/bin/bootstrap.jar:/home/web/servers/apache-tomee-plus/bin/tomcat-juli.jar
Server version: Apache Tomcat/7.0.55
Server built:   Jul 18 2014 05:34:04
Server number:  7.0.55.0
OS Name:        Linux
OS Version:     3.8.13-55.1.6.el7uek.x86_64
Architecture:   amd64
JVM Version:    1.7.0_75-mockbuild_2015_01_20_15_59-b00
JVM Vendor:     Oracle Corporation
当我在运行Tomcat7.0.68的Tomee1.7.4上运行代码时,一切都正常


令人费解的是,我也在普通的Tomcat 7.0.55.0上运行了相同的代码,代码运行得非常好,但是当同一个Tomcat与TomEE server打包时,我们得到了错误。

这里的任何线索都会非常有帮助。另外,除了Atmosphere(可以在第7卷上运行)之外,还有任何其他建议都会非常有用。这里的任何线索都会非常有用。另外,除了Atmosphere(可以在TomEE 7上运行)之外,还有其他建议吗?将我的tomcat版本从7.55提高到7.70并没有解决问题将我的tomcat版本从7.55提高到7.70并没有解决问题