diff --git a/spring-websocket/src/main/java/org/springframework/web/socket/messaging/SubProtocolWebSocketHandler.java b/spring-websocket/src/main/java/org/springframework/web/socket/messaging/SubProtocolWebSocketHandler.java index 4ffb57d50980969347d04fb4181f164cffb79acb..534681fc09c3e659553c550c7a2f7cc364461b67 100644 --- a/spring-websocket/src/main/java/org/springframework/web/socket/messaging/SubProtocolWebSocketHandler.java +++ b/spring-websocket/src/main/java/org/springframework/web/socket/messaging/SubProtocolWebSocketHandler.java @@ -70,7 +70,7 @@ public class SubProtocolWebSocketHandler implements WebSocketHandler, * connection isn't doing well (proxy issue, slow network?) and can be closed. * @see #checkSessions() */ - private final int TIME_TO_FIRST_MESSAGE = 60 * 1000; + private static final int TIME_TO_FIRST_MESSAGE = 60 * 1000; private final Log logger = LogFactory.getLog(SubProtocolWebSocketHandler.class); @@ -298,10 +298,6 @@ public class SubProtocolWebSocketHandler implements WebSocketHandler, if (holder != null) { holder.setHasHandledMessages(); } - else { - // Should never happen - throw new IllegalStateException("Session not found: " + session); - } checkSessions(); } @@ -366,7 +362,7 @@ public class SubProtocolWebSocketHandler implements WebSocketHandler, */ private void checkSessions() throws IOException { long currentTime = System.currentTimeMillis(); - if (!isRunning() && currentTime - this.lastSessionCheckTime < TIME_TO_FIRST_MESSAGE) { + if (!isRunning() || (currentTime - this.lastSessionCheckTime < TIME_TO_FIRST_MESSAGE)) { return; } if (this.sessionCheckLock.tryLock()) { @@ -376,7 +372,7 @@ public class SubProtocolWebSocketHandler implements WebSocketHandler, continue; } long timeSinceCreated = currentTime - holder.getCreateTime(); - if (holder.hasHandledMessages() || timeSinceCreated < TIME_TO_FIRST_MESSAGE) { + if (timeSinceCreated < TIME_TO_FIRST_MESSAGE) { continue; } WebSocketSession session = holder.getSession(); diff --git a/spring-websocket/src/test/java/org/springframework/web/socket/messaging/SubProtocolWebSocketHandlerTests.java b/spring-websocket/src/test/java/org/springframework/web/socket/messaging/SubProtocolWebSocketHandlerTests.java index 8f315b44b8aebeb0cc63eb8f7d472d7d9e11e1a9..66230c19cad74e7ef7f9fbdc36e2c7a8ef9ed95b 100644 --- a/spring-websocket/src/test/java/org/springframework/web/socket/messaging/SubProtocolWebSocketHandlerTests.java +++ b/spring-websocket/src/test/java/org/springframework/web/socket/messaging/SubProtocolWebSocketHandlerTests.java @@ -165,6 +165,7 @@ public class SubProtocolWebSocketHandlerTests { new DirectFieldAccessor(sessions.get("id1")).setPropertyValue("createTime", sixtyOneSecondsAgo); new DirectFieldAccessor(sessions.get("id2")).setPropertyValue("createTime", sixtyOneSecondsAgo); + this.webSocketHandler.start(); this.webSocketHandler.handleMessage(session1, new TextMessage("foo")); assertTrue(session1.isOpen());