Close WebSockets "harshly" if a close frame write fails
This commit is contained in:
parent
767f6a90e0
commit
e53a9f3f1a
|
@ -508,13 +508,7 @@ public class WebSocketConnection implements ClientEventListener {
|
||||||
message = "OK";
|
message = "OK";
|
||||||
}
|
}
|
||||||
|
|
||||||
try {
|
client.close(code, message);
|
||||||
client.close(code, message);
|
|
||||||
} catch (final Exception e) {
|
|
||||||
logger.warn("Orderly close failed", e);
|
|
||||||
|
|
||||||
client.hardDisconnectQuietly();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private record StoredMessageInfo(UUID guid, long serverTimestamp) {
|
private record StoredMessageInfo(UUID guid, long serverTimestamp) {
|
||||||
|
|
|
@ -62,9 +62,6 @@ public class WebSocketClient {
|
||||||
pendingRequestMapper.remove(requestId);
|
pendingRequestMapper.remove(requestId);
|
||||||
future.completeExceptionally(x);
|
future.completeExceptionally(x);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void writeSuccess() {}
|
|
||||||
});
|
});
|
||||||
} catch (WebSocketException e) {
|
} catch (WebSocketException e) {
|
||||||
logger.debug("Write", e);
|
logger.debug("Write", e);
|
||||||
|
@ -87,8 +84,17 @@ public class WebSocketClient {
|
||||||
return session.isOpen();
|
return session.isOpen();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void close(int code, String message) {
|
public void close(final int code, final String message) {
|
||||||
session.close(code, message);
|
session.close(code, message, new WriteCallback() {
|
||||||
|
@Override
|
||||||
|
public void writeFailed(final Throwable throwable) {
|
||||||
|
try {
|
||||||
|
session.disconnect();
|
||||||
|
} catch (final Exception e) {
|
||||||
|
logger.warn("Failed to disconnect session", e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean shouldDeliverStories() {
|
public boolean shouldDeliverStories() {
|
||||||
|
@ -96,16 +102,7 @@ public class WebSocketClient {
|
||||||
return Stories.parseReceiveStoriesHeader(value);
|
return Stories.parseReceiveStoriesHeader(value);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void hardDisconnectQuietly() {
|
|
||||||
try {
|
|
||||||
session.disconnect();
|
|
||||||
} catch (Exception e) {
|
|
||||||
// quietly we said
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private long generateRequestId() {
|
private long generateRequestId() {
|
||||||
return Math.abs(SECURE_RANDOM.nextLong());
|
return Math.abs(SECURE_RANDOM.nextLong());
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue