【问题标题】:How to close/purge websocket connection from server side with Tomcat如何使用 Tomcat 从服务器端关闭/清除 websocket 连接
【发布时间】: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


    【解决方案1】:

    你想像下面这样在 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);
     }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-10-22
      • 2013-04-20
      • 1970-01-01
      • 2014-09-14
      • 2019-05-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多