在OnWebSocketClose之后重新连接 - jetty 9.4

问题描述 投票:1回答:1

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

我可以在何时何地重新连接websocket问题(关闭网络问题或超时或在没有握手的情况下n秒后切断)

websocket jetty reconnect
1个回答
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抛出

在实施A中,someMethodToReconnect将被调用两次。

这导致了实施B.

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

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

© www.soinside.com 2019 - 2024. All rights reserved.