Websocket closed

Hi
I have problem with the websocket connection closes/timeouts.
My setup is:

  • Vaadin 7.7.4
  • Tomcat 8.5.3

I have two UI’s in my application. The problem occurrs on my PermalinkUI. This UI is not protected by Spring Security, so no user session is required. We present the permalinks on monitors and they are suppose to live forever (except server shutdown). The problem is that the websocket seems to timeout after about an hour although the UI is refreshing every 10 minutes. I don’t know if this is a Vaadin issue or if this is a timeout issue in Tomcat or the load balancer (Nginx)

The client console looks like attachment 1 after timeout.

Thanks for any help!

The server stacktrace looks like this:

java.io.IOException: java.io.IOException: Key no longer registered

    at org.apache.tomcat.websocket.WsRemoteEndpointImplBase.sendMessageBlock(WsRemoteEndpointImplBase.java:315)

    at org.apache.tomcat.websocket.WsRemoteEndpointImplBase.sendMessageBlock(WsRemoteEndpointImplBase.java:258)

    at org.apache.tomcat.websocket.WsSession.sendCloseMessage(WsSession.java:594)

    at org.apache.tomcat.websocket.WsSession.doClose(WsSession.java:494)

    at org.apache.tomcat.websocket.WsSession.close(WsSession.java:459)

    at org.apache.tomcat.websocket.WsSession.close(WsSession.java:453)

    at org.atmosphere.container.version.JSR356WebSocket.close(JSR356WebSocket.java:142)

    at org.atmosphere.cpr.AtmosphereResourceImpl.dirtyClose(AtmosphereResourceImpl.java:870)

    at org.atmosphere.cpr.DefaultBroadcaster.addAtmosphereResource(DefaultBroadcaster.java:1429)

    at org.atmosphere.cpr.AtmosphereResourceImpl.suspend(AtmosphereResourceImpl.java:407)

    at com.vaadin.server.communication.PushHandler.suspend(PushHandler.java:182)

    at com.vaadin.server.communication.PushHandler$1.run(PushHandler.java:105)

    at com.vaadin.server.communication.PushHandler.callWithUi(PushHandler.java:240)

    at com.vaadin.server.communication.PushHandler.onConnect(PushHandler.java:483)

    at com.vaadin.server.communication.PushAtmosphereHandler.onConnect(PushAtmosphereHandler.java:99)

    at com.vaadin.server.communication.PushAtmosphereHandler.onRequest(PushAtmosphereHandler.java:75)

    at org.atmosphere.cpr.AsynchronousProcessor.action(AsynchronousProcessor.java:199)

    at org.atmosphere.cpr.AsynchronousProcessor.suspended(AsynchronousProcessor.java:107)

    at org.atmosphere.container.Servlet30CometSupport.service(Servlet30CometSupport.java:66)

    at org.atmosphere.cpr.AtmosphereFramework.doCometSupport(AtmosphereFramework.java:2075)

    at org.atmosphere.websocket.DefaultWebSocketProcessor.dispatch(DefaultWebSocketProcessor.java:571)

    at org.atmosphere.websocket.DefaultWebSocketProcessor.open(DefaultWebSocketProcessor.java:215)

    at org.atmosphere.container.JSR356Endpoint.onOpen(JSR356Endpoint.java:206)

    at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.init(WsHttpUpgradeHandler.java:133)

    at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:827)

    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1425)

    at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52)

    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)

Caused by: java.io.IOException: Key no longer registered

    at org.apache.tomcat.util.net.NioBlockingSelector.write(NioBlockingSelector.java:88)

    at org.apache.tomcat.util.net.NioSelectorPool.write(NioSelectorPool.java:157)

    at org.apache.tomcat.util.net.NioEndpoint$NioSocketWrapper.doWrite(NioEndpoint.java:1241)

    at org.apache.tomcat.util.net.SocketWrapperBase.flushBlocking(SocketWrapperBase.java:428)

    at org.apache.tomcat.util.net.SocketWrapperBase.flush(SocketWrapperBase.java:418)

    at org.apache.tomcat.websocket.server.WsRemoteEndpointImplServer.doWrite(WsRemoteEndpointImplServer.java:98)

    at org.apache.tomcat.websocket.WsRemoteEndpointImplBase.writeMessagePart(WsRemoteEndpointImplBase.java:494)

    at org.apache.tomcat.websocket.WsRemoteEndpointImplBase.sendMessageBlock(WsRemoteEndpointImplBase.java:309)

    ... 30 more

2017-01-26 09:34:40,712 | ERROR | JDK14LoggerAdapter                  | 

java.io.IOException: java.nio.channels.ClosedChannelException

    at org.apache.tomcat.websocket.WsRemoteEndpointImplBase.sendMessageBlock(WsRemoteEndpointImplBase.java:315)

    at org.apache.tomcat.websocket.WsRemoteEndpointImplBase.sendMessageBlock(WsRemoteEndpointImplBase.java:258)

    at org.apache.tomcat.websocket.WsSession.sendCloseMessage(WsSession.java:594)

    at org.apache.tomcat.websocket.WsSession.doClose(WsSession.java:494)

    at org.apache.tomcat.websocket.WsSession.close(WsSession.java:459)

    at org.apache.tomcat.websocket.WsSession.close(WsSession.java:453)

    at org.atmosphere.container.version.JSR356WebSocket.close(JSR356WebSocket.java:142)

    at org.atmosphere.cpr.AtmosphereResourceImpl.close(AtmosphereResourceImpl.java:860)

    at org.atmosphere.cpr.DefaultBroadcaster$4.run(DefaultBroadcaster.java:1197)

    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)

    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)

    at java.lang.Thread.run(Thread.java:745)

Caused by: java.nio.channels.ClosedChannelException

    at sun.nio.ch.SocketChannelImpl.ensureWriteOpen(SocketChannelImpl.java:270)

    at sun.nio.ch.SocketChannelImpl.write(SocketChannelImpl.java:461)

    at org.apache.tomcat.util.net.NioChannel.write(NioChannel.java:134)

    at org.apache.tomcat.util.net.NioBlockingSelector.write(NioBlockingSelector.java:101)

    at org.apache.tomcat.util.net.NioSelectorPool.write(NioSelectorPool.java:157)

    at org.apache.tomcat.util.net.NioEndpoint$NioSocketWrapper.doWrite(NioEndpoint.java:1241)

    at org.apache.tomcat.util.net.SocketWrapperBase.flushBlocking(SocketWrapperBase.java:428)

    at org.apache.tomcat.util.net.SocketWrapperBase.flush(SocketWrapperBase.java:418)

    at org.apache.tomcat.websocket.server.WsRemoteEndpointImplServer.doWrite(WsRemoteEndpointImplServer.java:98)

    at org.apache.tomcat.websocket.WsRemoteEndpointImplBase.writeMessagePart(WsRemoteEndpointImplBase.java:494)

    at org.apache.tomcat.websocket.WsRemoteEndpointImplBase.sendMessageBlock(WsRemoteEndpointImplBase.java:309)

    ... 11 more

2017-01-26 09:34:41,518 | ERROR | JDK14LoggerAdapter                  | 

java.nio.channels.ClosedChannelException

    at sun.nio.ch.SocketChannelImpl.ensureReadOpen(SocketChannelImpl.java:257)

    at sun.nio.ch.SocketChannelImpl.read(SocketChannelImpl.java:300)

    at org.apache.tomcat.util.net.NioChannel.read(NioChannel.java:147)

    at org.apache.tomcat.util.net.NioEndpoint$NioSocketWrapper.fillReadBuffer(NioEndpoint.java:1220)

    at org.apache.tomcat.util.net.NioEndpoint$NioSocketWrapper.isReadyForRead(NioEndpoint.java:1128)

    at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:58)

    at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:148)

    at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:54)

    at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:53)

    at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:785)

    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1425)

    at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52)

    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)

30114.png

Hi @Johan, did you have any luck fixing this bug. I’m experiencing a similar issue with clients closing websockets. Not sure if it’s an issue with Spring, Vaadin or Tomcat …