我有一个实时应用程序,其中的客户端使用websockets与运行Spring Boot Tomcat的Spring Framework服务器连接。我希望服务器快速(在5秒内)检测到客户端由于网络断开或其他问题而停止响应的时间,然后关闭websocket。
我努力了
@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并server.session-timeout = 5在application.properties中进行设置
server.session-timeout = 5
我的测试方法是:
Spring FrameworkTomcat服务器如何快速检测到客户端已断开连接或没有响应以关闭websocket?
我最终采用的方法是实现应用程序层乒乓协议。
p
n
n*p
应该使用更简单的方法在基础TCP连接中使用超时来实现此目的。