在OnWebSocketClose之后重新连接 - jetty 9.4

时间:2017-05-21 09:41:01

标签: websocket jetty reconnect

根据这篇文章[When does OnWebSocketClose fire in Jetty 9OnClose正确地为我解雇。 但我无法重新连接,因为我没有正确的情况。 (websocett已关闭,我无法发送任何消息)

我可以在何时何地重新连接websocket问题(关闭网络问题或超时或在没有握手的情况下在n秒后通过服务器启动)

1 个答案:

答案 0 :(得分:1)

我不确定您是否已解决此问题,但我设法找到了重新连接WebSocket连接的解决方案。

对于我的场景,如果触发@OnWebSocketError方法,我想重新连接我的WebSocket连接。最初我像这样实现了它

实施A

@OnWebSocketError
public void onError(Throwable e) {
    someMethodToReconnect();
}

someMethodToReconnect

if (client == null) {
    client = new WebSocketClient(sslContextFactory);
    client.setMaxIdleTimeout(0);
}

if (socket == null) {
    socket = new ReaderSocket();  // ReaderSocket is the name of my @WebSocket class
}

try {
    client.start();
    client.connect(socket, new URI(socketUrl), request);
} catch (Exception e) {
    LOGGER.error("Unable to connect to WebSocket: ", e);
}

然而,这导致了另一个问题。如果服务器未启动,则会向我发送两种类型的错误。例外情况为java.net.ConnectExceptionorg.eclipse.jetty.websocket.api.UpgradeException

流程将是:

  1. 对WebSocket服务器的初始请求(服务器未启动)
  2. java.net.ConnectException抛出
  3. org.eclipse.jetty.websocket.api.UpgradeException抛出
  4. 实施A 中,someMethodToReconnect将被调用两次。

    这导致实施B

    @OnWebSocketError
    public void onError(Throwable e) {
        if (e instanceof ConnectException) {
            // Attempt to reconnect
            someMethodToReconnect();
        } else {
            // Ignore upgrade exception
        }
    }
    

    到目前为止实施B 工作正常,但是我试图找出是否会引发任何其他异常。