Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Java EE websocket在ServerEndpoint中未调用OnClose_Java_Websocket_Java Websocket - Fatal编程技术网

使用Java EE websocket在ServerEndpoint中未调用OnClose

使用Java EE websocket在ServerEndpoint中未调用OnClose,java,websocket,java-websocket,Java,Websocket,Java Websocket,我有一个简单的websocket端点,使用的是javax.websocket库,但是即使调用了OnOpen和OnMessage,也不会调用使用OnClose注释进行拦截的方法。我也尝试过子类化ServerEndpoint,但没有任何运气 这是我的密码 @ServerEndpoint("/websocket/cont") public class ContinousWebsocketExample { private static final Logger LOGGER = LoggerF

我有一个简单的websocket端点,使用的是
javax.websocket
库,但是即使调用了OnOpen和OnMessage,也不会调用使用OnClose注释进行拦截的方法。我也尝试过子类化
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。

如果在
onOpen
中没有永无止境的循环会发生什么,这就是问题所在。接得好@你知道有什么方法可以在websocket工作时强制关闭它,除了把中断作为一条信息?因为我假设当websocket服务器也在做一些实际有用的工作时,同样的行为也会发生。