Транспортные ошибки Websocket - PullRequest
0 голосов
/ 20 сентября 2019

Я использую 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 плохо с этим справляется?

...