如何使用Tomcat从服务器端关闭/清除WebSocket连接

xtfmy6hx  于 2022-11-24  发布在  其他
关注(0)|答案(1)|浏览(320)

我在Tomcat上使用jakarta.websocket,我希望我的服务器在一段时间后关闭与已连接客户端的WebSocket连接。

@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
        }
    }
}
zzlelutf

zzlelutf1#

你想在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);
 }
}

相关问题