Spring Sock JS连接经常在wildfly 8服务器上丢失

时间:2014-09-15 07:13:13

标签: spring spring-mvc wildfly sockjs wildfly-8

我有一个使用Spring Websocket的应用程序。它在Tomcat / WAS上运行完美 - 最近我们尝试将它移植到Wildfly上。有一个sockjs连接被创建但是一旦客户端发送消息,连接就会丢失!我已经为spring调度程序servlet启用了asyn支持。这是我得到的错误

2014-09-11 23:50:59,459 ERROR [stderr] (default task-40) Exception in thread "default 
task-40" java.lang.RuntimeException: java.io.IOException: UT000029: Channel was closed 
mid chunk, if you have attempted to write chunked data you cannot shutdown the channel 
until after it has all been written.
2014-09-11 23:50:59,462 ERROR [stderr] (default task-40)              at 

io.undertow.servlet.spec.HttpServletResponseImpl.responseDone(HttpServletResponseImpl.java:527)

2014-09-11 23:50:59,464 ERROR [stderr] (default task-40)              at 
io.undertow.servlet.spec.AsyncContextImpl$3.run(AsyncContextImpl.java:294)

2014-09-11 23:50:59,465 ERROR [stderr] (default task-40)              at 
io.undertow.servlet.spec.AsyncContextImpl$6.run(AsyncContextImpl.java:432)

2014-09-11 23:50:59,466 ERROR [stderr] (default task-40)              at 
io.undertow.servlet.spec.AsyncContextImpl$TaskDispatchRunnable.run(AsyncContextImpl.java:517)

2014-09-11 23:50:59,468 ERROR [stderr] (default task-40)              at 
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)

2014-09-11 23:50:59,469 ERROR [stderr] (default task-40)              at 
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)

2014-09-11 23:50:59,471 ERROR [stderr] (default task-40)              at  
java.lang.Thread.run(Thread.java:745)

虽然它提供了有关块的错误,但是没有明确的多部分数据从客户端发送到服务器,并且如上所述,我已经启用了对Spring的调度程序servlet的异步支持,如果WebSocket支持不可用,则使用它进行回退

1 个答案:

答案 0 :(得分:2)

我使用Wildfly 8.0 final和With Spring 4.1.0以及JSF 2.0& JDK 8.0_u25 我面临同样的例外:    UT005013:发生IOException:java.io.IOException:UT000029:频道在块中间关闭,如果您尝试编写分块数据,则在完全写入之前无法关闭频道。

我的服务器CPU处理每次发生异常时都会增加25%。 Alhumdulillah现在我解决了我的问题。

现在我正在使用: Wildfly 8.2.0 Final with Spring 4.1.0和JSF 2.0& JDK 8.0_u25

Wildfly 8.2.0解决了我的CPU处理问题 我观察我的服务器差不多8天然后我意识到当主机(客户端/用户)发送一些请求到服务器需要一些时间来计算/服务器响应时间时,该用户关闭他的浏览器窗口或注销,然后才能从服务器获得响应。当服务器完成其处理,然后尝试向其特定主机/客户端请求发送响应时,由于客户端关闭了浏览器窗口,因此发生IO异常。

我希望这会帮助你:)