-
-
Notifications
You must be signed in to change notification settings - Fork 202
Description
Summary
When using Jooby 4.x with JettyServer, the websocket.idleTimeout setting in application.conf is ignored.
The WebSocket connection always closes after ~30 seconds of inactivity, even if the configured timeout is much longer (e.g. 1h).
Switching to NettyServer works correctly.
Environment
- Jooby version: 4.0.7
- Server: Jetty
- Java version: 21
- Run mode:
joobyRun
Reproduction
App.java
import io.jooby.Jooby;
import io.jooby.jetty.JettyServer;
public class App extends Jooby {
{
ws("/ws", (ctx, ws) -> {
ws.onConnect(ws-> System.out.println("Connected"));
ws.onMessage((ws, msg) -> session.send("Echo: " + msg.value()));
});
}
public static void main(String[] args) {
runApp(args, new JettyServer(), App::new);
}
}conf/application.conf
websocket.idleTimeout = 1h
Then connect any WebSocket client and leave it idle for 1 minute.
Expected behavior
Connection should remain open for the configured timeout (1 hour).
Actual behavior
Connection closes after ~30 seconds:
org.eclipse.jetty.websocket.core.exception.WebSocketTimeoutException: Connection Idle Timeout
Additional Info
It seems the timeout value is correctly read in JettyServer.java:
long timeout = conf.hasPath("websocket.idleTimeout")
? conf.getDuration("websocket.idleTimeout", TimeUnit.MILLISECONDS)
: TimeUnit.MINUTES.toMillis(5L);
WebSocketUpgradeHandler.from(this.server, context, (container) -> {
container.setIdleTimeout(Duration.ofMillis(timeout));
});
However, the effective ServerWebSocketContainer used by JettyContext appears to be null or not initialized with this value.
Please confirm if this is a known issue or if I missed any configuration step.