OnClose не вызывается в ServerEndpoint с веб-сокетом Java EE - PullRequest
0 голосов
/ 26 июня 2018

У меня есть простая конечная точка веб-сокета, использующая библиотеку 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 после того, как интерфейс завершил соединение.

...