Я использую WebSockets из весеннего загрузочного приложения (это стандартная конфигурация, которую вы можете увидеть в большинстве уроков), и через некоторое время я увидел странную статистику в журналах.
Статистика генерируется org.springframework.web.socket.config.WebSocketMessageBrokerStats
https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/web/socket/config/WebSocketMessageBrokerStats.html
https://docs.spring.io/spring/docs/5.0.0.M4/spring-framework-reference/html/websocket.html#websocket-stomp-stats
и журналы выглядят так:
WebSocketSession [77 текущий WS (77) -HttpStream (0) -HttpPoll (0), всего 2957, 0 закрыто ненормально (0 ошибка подключения, 0 предел отправки, 2768 ошибка транспорта)], stompSubProtocol [обработано CONNECT (2957) -CONNECTED(2957) -DISCONNECT (0)], stompBrokerRelay [null], inboundChannel [размер пула = 0, активных потоков = 0, задач в очереди = 0, выполненных задач = 116784], outboundChannel [размер пула = 2, активных потоков = 0,задачи в очереди = 0, выполненные задачи = 446601], sockJsScheduler [размер пула = 1, активные потоки = 1, задачи в очереди = 0, выполненные задачи = 150]
Я был очень удивлен, когда увидел, чтобольшинство (2768) из всех (2957) соединений было закрыто из-за какой-то транспортной ошибки ...
Я не заметил ситуации, когда данные теряются в этом сообщении, по крайней мере, не в таком масштабе.
После добавления некоторого кода я мог видеть, что эти ошибки генерируются:
java.io.IOException: java.io.IOException: Connection reset by peer
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:612)
at org.apache.tomcat.websocket.WsSession.onClose(WsSession.java:532)
at org.apache.tomcat.websocket.WsFrameBase.processDataControl(WsFrameBase.java:347)
at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:289)
at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:133)
java.io.IOException: Broken pipe
at java.base/sun.nio.ch.FileDispatcherImpl.write0(Native Method)
at java.base/sun.nio.ch.SocketDispatcher.write(SocketDispatcher.java:47)
at java.base/sun.nio.ch.IOUtil.writeFromNativeBuffer(IOUtil.java:113)
at java.base/sun.nio.ch.IOUtil.write(IOUtil.java:79)
at java.base/sun.nio.ch.IOUtil.write(IOUtil.java:50)
at java.base/sun.nio.ch.SocketChannelImpl.write(SocketChannelImpl.java:466)
at org.apache.tomcat.util.net.SecureNioChannel.flush(SecureNioChannel.java:144)
at org.apache.tomcat.util.net.SecureNioChannel.close(SecureNioChannel.java:510)
at org.apache.tomcat.util.net.NioEndpoint$NioSocketWrapper.close(NioEndpoint.java:1248)
at org.apache.tomcat.websocket.server.WsRemoteEndpointImplServer.doClose(WsRemoteEndpointImplServer.java:167)
at org.apache.tomcat.websocket.WsRemoteEndpointImplBase.close(WsRemoteEndpointImplBase.java:710)
at org.apache.tomcat.websocket.WsSession.sendCloseMessage(WsSession.java:619)
at org.apache.tomcat.websocket.WsSession.onClose(WsSession.java:532)
at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.close(WsHttpUpgradeHandler.java:232)
at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:155)
at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:54)
Мне интересно, насколько я должен беспокоиться об ошибках транспорта ...это стандартное поведение при разрыве соединения?Или, может быть, мое приложение FE плохо с этим справляется?