Я не уверен, что вы решили эту проблему, но мне удалось найти решение для повторного подключения соединения WebSocket.
Для моего сценария я хотел бы повторно подключить свое соединение 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);
}
Однако это привело к другой проблеме. Мне возвращают 2 типа ошибок, если сервер не работает. Исключения составляют java.net.ConnectException
и org.eclipse.jetty.websocket.api.UpgradeException
.
Поток будет:
- Первоначальный запрос к серверу WebSocket (сервер не работает)
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 работает нормально, однако я пытаюсь выяснить, есть ли какие-либо другие исключения, которые могут быть вызваны.
person
Vantablack
schedule
20.07.2017