根据这篇文章[When does OnWebSocketClose fire in Jetty 9,OnClose
正确地为我解雇。
但我无法重新连接,因为我没有正确的情况。 (websocett已关闭,我无法发送任何消息)
我可以在何时何地重新连接websocket问题(关闭网络问题或超时或在没有握手的情况下在n秒后通过服务器启动)
答案 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.ConnectException
和org.eclipse.jetty.websocket.api.UpgradeException
。
流程将是:
java.net.ConnectException
抛出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 工作正常,但是我试图找出是否会引发任何其他异常。