我開發了一個播放音頻和視頻文件的Web應用程序。用戶可以更改當前正在播放的曲目,在這種情況下,客戶端會爲HTML 5播放器設置新的來源。應用程序的分佈採用嵌入式碼頭9,和其他環境中運行WildFly 8Java/Jetty/Wildfly:處理異常終止的客戶端連接
的應用程序工作正常,但是當用戶更改軌道WildFly問題,該堆棧跟蹤:
java.io.IOException: An established connection was aborted by the software in your host machine
at sun.nio.ch.SocketDispatcher.writev0(Native Method) [rt.jar:1.7.0_75]
at sun.nio.ch.SocketDispatcher.writev(SocketDispatcher.java:55) [rt.jar:1.7.0_75]
at sun.nio.ch.IOUtil.write(IOUtil.java:148) [rt.jar:1.7.0_75]
at sun.nio.ch.SocketChannelImpl.write(SocketChannelImpl.java:524) [rt.jar:1.7.0_75]
at org.xnio.nio.NioSocketConduit.write(NioSocketConduit.java:161)
at io.undertow.server.protocol.http.HttpResponseConduit.write(HttpResponseConduit.java:609) [undertow-core-1.1.0.Final.jar:1.1.0.Final]
at io.undertow.conduits.AbstractFixedLengthStreamSinkConduit.write(AbstractFixedLengthStreamSinkConduit.java:148) [undertow-core-1.1.0.Final.jar:1.1.0.Final]
...
和Jetty拋出類似的錯誤:
org.eclipse.jetty.io.EofException
at org.eclipse.jetty.io.ChannelEndPoint.flush(ChannelEndPoint.java:192)
at org.eclipse.jetty.io.WriteFlusher.flush(WriteFlusher.java:408)
at org.eclipse.jetty.io.WriteFlusher.write(WriteFlusher.java:302)
at org.eclipse.jetty.io.AbstractEndPoint.write(AbstractEndPoint.java:128)
...
Caused by: java.io.IOException: Broken pipe
at sun.nio.ch.FileDispatcherImpl.write0(Native Method)
at sun.nio.ch.SocketDispatcher.write(SocketDispatcher.java:47)
at sun.nio.ch.IOUtil.writeFromNativeBuffer(IOUtil.java:93)
at sun.nio.ch.IOUtil.write(IOUtil.java:65)
這是有道理的 - 是的,客戶端已經終止以前的源文件,併發出下一個文件的GET請求的連接,但是這是應用程序的預期操作。
有沒有辦法妥善處理這個問題並避免這些錯誤?
您確定您使用的是Jetty? 'io.undertow.server.protocol.http'表示你正在使用Undertow類似的項目,但不是Jetty。 –
好的@JoakimErdfelt,你是對的。我使用的是WildFly和Jetty,我最初發布的是用於WildFly的。編輯問題以添加兩個堆棧跟蹤。 – bdunn