我有一个实时应用,客户端使用Websockets连接到运行Spring Boot Tomcat的Spring Framework服务器。我希望服务器能够在客户端由于网络断开或其他问题而停止响应时,在5秒内快速检测并关闭WebSocket。
我尝试过:
按照文档中“配置WebSocket引擎”的说明设置最大会话空闲超时时间。 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生成之间的链接。
从服务器每2.5秒发送一次ping消息。当我手动断开网络连接使客户端断开连接后,服务器会愉快地发送ping消息30多秒,直到出现传输错误。
同时执行1和2
同时执行1、2,并在application.properties中设置
server.session-timeout = 5
我测试这个的方法是:
- 从笔记本电脑客户端连接到Tomcat服务器的WebSocket
- 使用物理开关关闭笔记本电脑上的网络连接
- 等待Tomcat服务器事件
Spring FrameworkTomcat服务器如何快速检测到客户端已断开连接或未响应以关闭WebSocket?