У меня есть простая конечная точка веб-сокета, использующая библиотеку javax.websocket
, но метод, перехваченный с аннотацией OnClose , никогда не вызывается, даже если OnOpen и OnMessage называются.Я также попытался создать подкласс ServerEndpoint
без какой-либо удачи.
Это мой код
@ServerEndpoint("/websocket/cont")
public class ContinousWebsocketExample {
private static final Logger LOGGER = LoggerFactory.getLogger(ContinousWebsocketExample.class);
private int counter = 0;
@OnOpen
public void onOpen(Session client, EndpointConfig config) {
LOGGER.debug("---------------------------Opening websocket connection-----------------------------------");
while (true) {
client.getAsyncRemote().sendText("Counter is: " + counter);
counter ++;
LOGGER.debug(String.valueOf(client.isOpen()));
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
@OnClose
public void onClose(Session client, CloseReason reason) {
LOGGER.debug("---------------------------Closing websocket connection-----------------------------------");
}
}
и соответствующий Javascript:
var socket = new WebSocket('ws://localhost:8080/examples/websocket/cont')
socket.close();
Программа продолжает печатать счетчик даже после того, как интерфейс закрыл сокет.Однако client.isOpen()
возвращает false после того, как интерфейс завершил соединение.