이 게시물에 따르면 [When does OnWebSocketClose fire in Jetty 9, OnClose
가 올바르게 작동합니다. 상황이 올바르지 않기 때문에 다시 연결할 수 없습니다. (websocett 폐쇄 내가 어떤 메시지를 보낼 수 없습니다)OnWebSocketClose - jetty 이후에 다시 연결하십시오. 9.4
어디서 나는
이 게시물에 따르면 [When does OnWebSocketClose fire in Jetty 9, OnClose
가 올바르게 작동합니다. 상황이 올바르지 않기 때문에 다시 연결할 수 없습니다. (websocett 폐쇄 내가 어떤 메시지를 보낼 수 없습니다)OnWebSocketClose - jetty 이후에 다시 연결하십시오. 9.4
어디서 나는
(핸드 쉐이크없이 n 초 후 가까운 네트워크 문제 또는 단절에 의한 제한 또는 킥아웃에 의해) 웹 소켓 문제에 다시 연결할 수 있습니다 때 나는 아니에요 이 문제를 해결했다면 WebSocket 연결을 다시 연결할 수있는 솔루션을 찾을 수있었습니다.
@OnWebSocketError
메서드가 실행되면 내 웹 소켓 연결을 다시 연결하고 싶습니다. 이것은 또 다른 문제에지도,
@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
는을 던져 그리고 구현, someMethodToReconnect
을에를 던져 두 번 부름 받았다.
이
그러나 내가 던져 질 것이다 다른 예외가 있는지 알아 내기 위해 노력하고있어, 잘 작동 구현 B@OnWebSocketError
public void onError(Throwable e) {
if (e instanceof ConnectException) {
// Attempt to reconnect
someMethodToReconnect();
} else {
// Ignore upgrade exception
}
}
지금까지 구현 B되었다. 여기
java.util.concurrent.RejectedExecutionException: Max requests per destination 1024 exceeded for HttpDestination
내 솔루션입니다 : 스레드를 생성하기 전에 연결 :
@Vantablack, 실제로 우리의 OnError 콜백 메소드에 다시 연결 할 수 없어, 그것은 예외가 발생할 수
new Thread(new Runnable() {
public void run() {
while (true) {
try {
Thread.sleep(2 * 1000L);
} catch (InterruptedException e) {
}
if (connClosed.get() && !connecting.get()) {
try {
connect();
} catch (Exception e) {
logger.warn(e.getMessage(), e);
}
}
}
}
}).start();
and set connecting=true in connect function, and connecting = false in onConnect, onError, onClose method. set connClosed=true in onError,onClose, =false in onConnect.
이런 방식으로 한 번에 onError를 몇 번이나 호출해도 한 번만 다시 연결됩니다.