我在Tomcat上使用jakarta.websocket,我希望我的服务器在一段时间后关闭与连接客户端的websocket连接。为此,我调用了session.close(),它确实触发了
@OnClose
public void end() {}但是,我看到客户机(可能没有遵从结束握手)仍然能够通过上一次(据说是关闭的)会话向服务器发送二进制消息。这是意料之中吗?双方是否确实需要同意服务器关闭/清除会话?我还想为会话设置几毫秒的超时时间,但我不知道这样做是否有效。或者通过Tomcat杀死底层TCP连接,但我还是不知道如何做到这一点。
最终,我如何强制将会话从服务器端彻底清除,从而使客户端无法使用其上一次会话到达服务器?
我要从一个可运行的地方关闭它:
private class disconnector implements Runnable {
public void run() {
try {
session.close();
} catch (IOException e) {
// So far, I have not noticed any exceptions here
}
}
}发布于 2022-11-15 08:17:50
您想在OnMessage中像下面这样控制这个吗?也就是说,只有在有有效的会话时,才能回复。否则忽略那个客户端会话。
@OnMessage
public void message(final String message, final javax.websocket.Session session) throws IOException {
for (final Session s : session.getOpenSessions()) {
final Basic endpoint = s.getBasicRemote();
endpoint.sendText(message);
}
}https://stackoverflow.com/questions/74336017
复制相似问题