Всегда ли вызывается @OnWebSocketClose? Я получаю @onwebsocketerror, а @onwebsocketclose не вызывается - PullRequest
0 голосов
/ 06 ноября 2019

Всегда ли вызывается @onwebsocketclose? Я получаю @onwebsocketerror, а @onwebsocketclose не вызывается.

 There might be some broken pipe connection .
 StackTrace :
org.eclipse.jetty.io.EofException: null
    at org.eclipse.jetty.io.ChannelEndPoint.flush(ChannelEndPoint.java:283) ~[application.jar:?]
    at org.eclipse.jetty.io.WriteFlusher.flush(WriteFlusher.java:422) ~[application.jar:?]
    at org.eclipse.jetty.io.WriteFlusher.completeWrite(WriteFlusher.java:378) ~[application.jar:?]
    at org.eclipse.jetty.io.ChannelEndPoint$3.run(ChannelEndPoint.java:132) ~[application.jar:?]
    at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.runTask(EatWhatYouKill.java:336) ~[application.jar:?]
    at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.doProduce(EatWhatYouKill.java:313) ~[application.jar:?]
    at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.tryProduce(EatWhatYouKill.java:171) ~[application.jar:?]
    at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.run(EatWhatYouKill.java:129) ~[application.jar:?]
    at org.eclipse.jetty.util.thread.ReservedThreadExecutor$ReservedThread.run(ReservedThreadExecutor.java:367) ~[application.jar:?]
    at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:782) ~[application.jar:?]
    at org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:918) ~[application.jar:?]
    at java.lang.Thread.run(Thread.java:745) [?:1.8.0_111]
Caused by: java.io.IOException: Broken pipe
    at sun.nio.ch.FileDispatcherImpl.write0(Native Method) ~[?:1.8.0_111]
    at sun.nio.ch.SocketDispatcher.write(SocketDispatcher.java:47) ~[?:1.8.0_111]
    at sun.nio.ch.IOUtil.writeFromNativeBuffer(IOUtil.java:93) ~[?:1.8.0_111]
    at sun.nio.ch.IOUtil.write(IOUtil.java:65) ~[?:1.8.0_111]
    at sun.nio.ch.SocketChannelImpl.write(SocketChannelImpl.java:471)~[?:1.8.0_111]
    at org.eclipse.jetty.io.ChannelEndPoint.flush(ChannelEndPoint.java:261) ~[application.jar:?]

1 Ответ

0 голосов
/ 06 ноября 2019

метод Close вызывается для завершения или ненормального завершения WebSocket.

Ошибки ввода-вывода, тайм-ауты простоя, резкие разъединения и другие ошибки в методе Error.

Любое событиеonClose() или onError() сигнализирует об окончании сеанса.

Исключительные замыкания (throwables) не позволяют определить, какой из двух методов событий приложения вызывается.

Некоторые варианты поведения:

  • Мы пытаемся уведомить onClose() только один раз.
  • Мы пытаемся уведомить onError() только один раз.
  • Если вызывается onClose(), onError() будетне вызываться.
  • Если вызывается onError(), onClose() вызываться не будет.
  • Если определено, что замыкание происходит из исключения, то:
    1. исключение регистрируется на уровне DEBUG
    2. приложение onError() вызывается (если еще не вызвано)
    3. закрывающий фрейм ставится в очередь (если еще не отправлен или поставлен в очередь)
    4. при успешном завершении или сбое при закрытии кадра соединение разорвано. (в этом исключительном случае нет ожидания для удаленного закрытия кадра)

Сбои во время рукопожатия ...

  • В клиенте WebSocketсоединение завершится неудачно с исключением (это может быть сообщено как сбой при попытке получить объект Session из будущего соединения)
  • На сервере WebSocket соединение не будет выполнено, сеанс WebSocket не создан, нетКонечная точка создана, не вызывается onOpen().
...