使用Java EE websocket在ServerEndpoint中未调用OnClose
我有一个简单的websocket端点,使用的是使用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
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服务器也在做一些实际有用的工作时,同样的行为也会发生。