我最近一直在研究带注释的 websockets,使用Jetty API (9.4.5 release),并与它聊天。
但是我遇到了一个问题,5 分钟后(我认为这是默认计时器),会话关闭(不是由于错误)。我找到的唯一解决方案是在关闭事件时通知我的套接字并在新套接字中重新打开连接。
但是我在stackOverflow上读过,通过IdleTimeOut在WebsocketPolicy中设置,我可以避免这个问题:
3600000例如,我尝试设置为,但行为根本没有改变
我也尝试将其设置为-1但出现以下错误:IdleTimeout [-1] must be a greater than or equal to 0
private ServletContextHandler setupWebsocketContext() {
ServletContextHandler websocketContext = new AmosContextHandler(ServletContextHandler.SESSIONS | ServletContextHandler.SECURITY);
WebSocketHandler socketCreator = new WebSocketHandler(){
@Override
public void configure(WebSocketServletFactory factory){
factory.getPolicy().setIdleTimeout(-1);
factory.getPolicy().setMaxTextMessageBufferSize(MAX_MESSAGE_SIZE);
factory.getPolicy().setMaxBinaryMessageBufferSize(MAX_MESSAGE_SIZE);
factory.getPolicy().setMaxTextMessageSize(MAX_MESSAGE_SIZE);
factory.getPolicy().setMaxBinaryMessageSize(MAX_MESSAGE_SIZE);
factory.setCreator(new UpgradedSocketCreator());
}
};
ServletHolder sh = new ServletHolder(new WebsocketChatServlet());
websocketContext.addServlet(sh, "/*");
websocketContext.setContextPath("/Chat");
websocketContext.setHandler(socketCreator);
websocketContext.getSessionHandler().setMaxInactiveInterval(0);
return websocketContext;
}
Run Code Online (Sandbox Code Playgroud)我还尝试OnConnect通过使用 call直接在事件中更改策略session.getpolicy.setIdleTimeOut(),但我没有注意到任何结果。
这是预期的行为还是我错过了什么?谢谢你的帮助。
编辑: …