【发布时间】:2022-11-15 16:33:20
【问题描述】:
我在 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
}
}
}
【问题讨论】:
标签: tomcat jakarta-ee websocket java-websocket