gpt4 book ai didi

java - 如何在 Java Spring Tomcat 中快速关闭无响应的 websocket?

转载 作者:IT老高 更新时间:2023-10-28 13:59:29 25 4
gpt4 key购买 nike

我有一个实时应用程序,客户端使用 websockets 连接运行 Spring Boot Tomcat 的 Spring Framework 服务器。我希望服务器能够快速(在 5 秒内)检测到客户端何时因网络断开或其他问题而停止响应并关闭 websocket。

我试过了

  1. 按照文档“配置 WebSocket 引擎”中的描述设置最大 session 空闲超时 http://docs.spring.io/spring/docs/current/spring-framework-reference/html/websocket.html

    @Bean
    public WebSocketHandler clientHandler() {
    return new PerConnectionWebSocketHandler(ClientHandler.class);
    }
    @Bean
    public ServletServerContainerFactoryBean createWebSocketContainer() {
    ServletServerContainerFactoryBean container =
    new ServletServerContainerFactoryBean();
    container.setMaxSessionIdleTimeout(5000);
    container.setAsyncSendTimeout(5000);
    return container;
    }

我不确定这是否正确实现,因为我看不到 ServletServerContainerFactoryBean 和我的一代 ClientHandlers 之间的链接。

  1. 每 2.5 秒从服务器发送一次 ping 消息。在我通过断开网络连接手动断开客户端后,服务器会愉快地再发送 30 多秒的 ping,直到出现传输错误。

  2. 1 和 2 同时

  3. 1 和 2 并在 application.properties 中设置 server.session-timeout = 5

我的测试方法是:

  1. 将笔记本电脑客户端的 websocket 连接到 Tomcat 服务器
  2. 使用物理开关关闭笔记本电脑上的网络连接
  3. 等待 Tomcat 服务器事件

Spring FrameworkTomcat 服务器如何快速检测到客户端已断开连接或没有响应关闭 websocket?

最佳答案

Application Events可以帮到你。

PS:Annotation driven events

PS2:我做了一个 example project给你

关于java - 如何在 Java Spring Tomcat 中快速关闭无响应的 websocket?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26193072/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com