[ 
https://issues.apache.org/jira/browse/WICKET-6643?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16793419#comment-16793419
 ] 

Martin Grigorov edited comment on WICKET-6643 at 3/15/19 7:57 AM:
------------------------------------------------------------------

The problem here is that you try to write to the server at page unload time 
(from error.js):
{code:java}
window.onunload = function() {
    Wicket.WebSocket.send('Bla!');
};{code}

The last chance to write to the server is at `beforeunload` event time.
At `unload` the browser sends `close` message to the opened WebSocket 
connections and depending on which packet reaches the server first (the close 
or the send) it may work or not.

I will not suppress the IOException in Wicket because it might help someone 
realize such kind of an issue in his/her application.


was (Author: mgrigorov):
The problem here is that you try to write to the server at page unload time 
(from error.js):
{code:java}
window.onbeforeunload = function() {
    Wicket.WebSocket.send('Bla!');
};{code}

The last chance to write to the server is at `beforeunload` event time.
At `unload` the browser sends `close` message to the opened WebSocket 
connections and depending on which packet reaches the server first (the close 
or the send) it may work or not.

I will not suppress the IOException in Wicket because it might help someone 
realize such kind of an issue in his/her application.

> exception in web-sockets on tomcat 8
> ------------------------------------
>
>                 Key: WICKET-6643
>                 URL: https://issues.apache.org/jira/browse/WICKET-6643
>             Project: Wicket
>          Issue Type: Improvement
>    Affects Versions: 7.12.0
>         Environment: tomcat 8
>            Reporter: Ernesto Reinaldo Barreiro
>            Assignee: Martin Grigorov
>            Priority: Trivial
>         Attachments: websockets-error.tar.gz
>
>
> In our log files we get following stacktrace
> {code}
> 09:41:11.673 [http-nio-8080-exec-10] ERROR com.semedy.WebSocketMessage - 
> Could not send notification java.io.IOException: java.io.IOException: Broken 
> pipe at 
> org.apache.tomcat.websocket.WsRemoteEndpointImplBase.sendMessageBlock(WsRemoteEndpointImplBase.java:315)
>  ~[tomcat-websocket.jar:8.5.38] at 
> org.apache.tomcat.websocket.WsRemoteEndpointImplBase.sendMessageBlock(WsRemoteEndpointImplBase.java:250)
>  ~[tomcat-websocket.jar:8.5.38] at 
> org.apache.tomcat.websocket.WsRemoteEndpointImplBase.sendString(WsRemoteEndpointImplBase.java:191)
>  ~[tomcat-websocket.jar:8.5.38] at 
> org.apache.tomcat.websocket.WsRemoteEndpointBasic.sendText(WsRemoteEndpointBasic.java:37)
>  ~[tomcat-websocket.jar:8.5.38] at 
> org.apache.wicket.protocol.ws.javax.JavaxWebSocketConnection.sendMessage(JavaxWebSocketConnection.java:81)
>  ~[wicket-native-websocket-javax-7.12.0.jar:7.12.0] at 
> com.semedy.WebSocketMessage.privateSendNotificationTo(WebSocketMessage.java:83)
>  [classes/:?] at 
> com.semedy.WebSocketMessage.sendNotificationToAllSessions(WebSocketMessage.java:70)
>  [classes/:?] at com.semedy.BasePage$1.onMessage(BasePage.java:32) 
> [classes/:?] at 
> org.apache.wicket.protocol.ws.api.WebSocketBehavior.onEvent(WebSocketBehavior.java:64)
>  [wicket-native-websocket-core-7.12.0.jar:7.12.0] at 
> org.apache.wicket.settings.FrameworkSettings.dispatchEvent(FrameworkSettings.java:147)
>  [wicket-core-7.12.0.jar:7.12.0] at 
> org.apache.wicket.ComponentEventSender.dispatchToComponent(ComponentEventSender.java:292)
>  [wicket-core-7.12.0.jar:7.12.0] at 
> org.apache.wicket.ComponentEventSender.breadth(ComponentEventSender.java:149) 
> [wicket-core-7.12.0.jar:7.12.0] at 
> org.apache.wicket.ComponentEventSender.send(ComponentEventSender.java:68) 
> [wicket-core-7.12.0.jar:7.12.0] at 
> org.apache.wicket.Component.send(Component.java:4575) 
> [wicket-core-7.12.0.jar:7.12.0] at 
> org.apache.wicket.protocol.ws.api.WebSocketMessageBroadcastHandler$1.run(WebSocketMessageBroadcastHandler.java:74)
>  [wicket-native-websocket-core-7.12.0.jar:7.12.0] at 
> org.apache.wicket.protocol.ws.WebSocketSettings$SameThreadExecutor.run(WebSocketSettings.java:362)
>  [wicket-native-websocket-core-7.12.0.jar:7.12.0] at 
> org.apache.wicket.protocol.ws.api.WebSocketMessageBroadcastHandler.respond(WebSocketMessageBroadcastHandler.java:97)
>  [wicket-native-websocket-core-7.12.0.jar:7.12.0] at 
> org.apache.wicket.request.cycle.RequestCycle$HandlerExecutor.respond(RequestCycle.java:895)
>  [wicket-core-7.12.0.jar:7.12.0] at 
> org.apache.wicket.request.RequestHandlerStack.execute(RequestHandlerStack.java:64)
>  [wicket-request-7.12.0.jar:7.12.0] at 
> org.apache.wicket.request.cycle.RequestCycle.execute(RequestCycle.java:265) 
> [wicket-core-7.12.0.jar:7.12.0] at 
> org.apache.wicket.request.cycle.RequestCycle.processRequest(RequestCycle.java:222)
>  [wicket-core-7.12.0.jar:7.12.0] at 
> org.apache.wicket.request.cycle.RequestCycle.processRequestAndDetach(RequestCycle.java:293)
>  [wicket-core-7.12.0.jar:7.12.0] at 
> org.apache.wicket.protocol.ws.api.AbstractWebSocketProcessor.broadcastMessage(AbstractWebSocketProcessor.java:263)
>  [wicket-native-websocket-core-7.12.0.jar:7.12.0] at 
> org.apache.wicket.protocol.ws.api.AbstractWebSocketProcessor.onMessage(AbstractWebSocketProcessor.java:148)
>  [wicket-native-websocket-core-7.12.0.jar:7.12.0] at 
> org.apache.wicket.protocol.ws.javax.JavaxWebSocketProcessor$StringMessageHandler.onMessage(JavaxWebSocketProcessor.java:65)
>  [wicket-native-websocket-javax-7.12.0.jar:7.12.0] at 
> org.apache.wicket.protocol.ws.javax.JavaxWebSocketProcessor$StringMessageHandler.onMessage(JavaxWebSocketProcessor.java:60)
>  [wicket-native-websocket-javax-7.12.0.jar:7.12.0] at 
> org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:394) 
> [tomcat-websocket.jar:8.5.38] at 
> org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:119)
>  [tomcat-websocket.jar:8.5.38] at 
> org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:495) 
> [tomcat-websocket.jar:8.5.38] at 
> org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:294) 
> [tomcat-websocket.jar:8.5.38] at 
> org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:133)
>  [tomcat-websocket.jar:8.5.38] at 
> org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:82)
>  [tomcat-websocket.jar:8.5.38] at 
> org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:171)
>  [tomcat-websocket.jar:8.5.38] at 
> org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:151)
>  [tomcat-websocket.jar:8.5.38] at 
> org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:148)
>  [tomcat-websocket.jar:8.5.38] at 
> org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:54)
>  [tomcat-coyote.jar:8.5.38] at 
> org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:53)
>  [tomcat-coyote.jar:8.5.38] at 
> org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:806)
>  [tomcat-coyote.jar:8.5.38] at 
> org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1498)
>  [tomcat-coyote.jar:8.5.38] at 
> org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
>  [tomcat-coyote.jar:8.5.38] at 
> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
>  [?:1.8.0_201] at 
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
>  [?:1.8.0_201] at 
> org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
>  [tomcat-util.jar:8.5.38] at java.lang.Thread.run(Thread.java:748) 
> [?:1.8.0_201] Caused by: java.io.IOException: Broken pipe at 
> sun.nio.ch.FileDispatcherImpl.write0(Native Method) ~[?:1.8.0_201] at 
> sun.nio.ch.SocketDispatcher.write(SocketDispatcher.java:47) ~[?:1.8.0_201] at 
> sun.nio.ch.IOUtil.writeFromNativeBuffer(IOUtil.java:93) ~[?:1.8.0_201] at 
> sun.nio.ch.IOUtil.write(IOUtil.java:65) ~[?:1.8.0_201] at 
> sun.nio.ch.SocketChannelImpl.write(SocketChannelImpl.java:471) ~[?:1.8.0_201] 
> at org.apache.tomcat.util.net.NioChannel.write(NioChannel.java:134) 
> ~[tomcat-coyote.jar:8.5.38] at 
> org.apache.tomcat.util.net.NioBlockingSelector.write(NioBlockingSelector.java:101)
>  ~[tomcat-coyote.jar:8.5.38] at 
> org.apache.tomcat.util.net.NioSelectorPool.write(NioSelectorPool.java:157) 
> ~[tomcat-coyote.jar:8.5.38] at 
> org.apache.tomcat.util.net.NioEndpoint$NioSocketWrapper.doWrite(NioEndpoint.java:1306)
>  ~[tomcat-coyote.jar:8.5.38] at 
> org.apache.tomcat.util.net.SocketWrapperBase.doWrite(SocketWrapperBase.java:726)
>  ~[tomcat-coyote.jar:8.5.38] at 
> org.apache.tomcat.util.net.SocketWrapperBase.flushBlocking(SocketWrapperBase.java:679)
>  ~[tomcat-coyote.jar:8.5.38] at 
> org.apache.tomcat.util.net.SocketWrapperBase.flush(SocketWrapperBase.java:669)
>  ~[tomcat-coyote.jar:8.5.38] at 
> org.apache.tomcat.websocket.server.WsRemoteEndpointImplServer.doWrite(WsRemoteEndpointImplServer.java:96)
>  ~[tomcat-websocket.jar:8.5.38] at 
> org.apache.tomcat.websocket.WsRemoteEndpointImplBase.writeMessagePart(WsRemoteEndpointImplBase.java:494)
>  ~[tomcat-websocket.jar:8.5.38] at 
> org.apache.tomcat.websocket.WsRemoteEndpointImplBase.sendMessageBlock(WsRemoteEndpointImplBase.java:309)
>  ~[tomcat-websocket.jar:8.5.38] ... 43 more
> {code}
>  
> I don't know if it is really a wicket error or tomcat (or how we are using 
> this in our application). It seems to have no side effect on how we are using 
> websockets in our application. But it would be nice to get rid of stack trace 
> on logs. I managed to reproduce this in quick-start.
> To reproduce just reload the home page (maybe more than once).
>  
> This happens with latest tomcat 8.5.38.



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Reply via email to