Seb*_*ian 5 java websocket spring-boot
我正在尝试使用 Spring Boot (1.5.13) 实现一个 websocket。
消息传递工作正常,但大约 30 分钟后连接被服务器终止(原因 1008 -“此连接是在已结束的经过身份验证的 HTTP 会话下建立的”)。我尝试设置不同的超时,但似乎没有任何效果。
@Service
@RequiredArgsConstructor
@Slf4j
public class OCPPSocketHandler extends TextWebSocketHandler {
@Override
public void handleTextMessage(WebSocketSession webSocketSession, TextMessage textMessage)
throws IOException {
...
}
}
@Configuration
@EnableWebSocket
public class WebSocketConfig implements WebSocketConfigurer {
public static final String ENDPOINT = "/pp/v2.0";
@Autowired
private CustomSocketHandler socketHandler;
public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
registry.addHandler(
new CustomExceptionWebSocketHandlerDecorator(socketHandler), ENDPOINT
)
.setAllowedOrigins("*");
}
}
Run Code Online (Sandbox Code Playgroud)
应用程序属性:
#6h as milliseconds
server.connection-timeout=3600000
server.servlet.session.timeout=6h
Run Code Online (Sandbox Code Playgroud)
每 30 分钟发送一次 TextMessage (WebSocket) 以保持连接有效。
我看过这个关于会话超时的问题,但我在那里看不到解决方案
如果服务器或客户端之间的任何连接被关闭,则连接可以被关闭,如果防火墙注意到已建立的连接上没有活动,则也可以被防火墙关闭。
所以你还需要在客户端检查超时。可以合理地认为,30 分钟是这种连接的默认超时,因此它在客户端使用默认值。
此外,定期检查连接状态是一个很好的设计,例如发送某种 ping(来自客户端的消息)/pong(来自服务器的响应)消息。例如,如果您每分钟执行一次,您就会了解连接状态,并且连接永远不会因不活动而关闭。
| 归档时间: |
|
| 查看次数: |
6861 次 |
| 最近记录: |