This is an automated email from the ASF dual-hosted git repository. markt pushed a commit to branch main in repository https://gitbox.apache.org/repos/asf/tomcat.git
The following commit(s) were added to refs/heads/main by this push: new 3d077db9d7 Improve handling of multiple disconnects 3d077db9d7 is described below commit 3d077db9d744df1585d252d367166dd69b659c1e Author: Mark Thomas <ma...@apache.org> AuthorDate: Wed May 1 17:20:07 2024 +0100 Improve handling of multiple disconnects --- webapps/docs/changelog.xml | 4 ++++ webapps/examples/WEB-INF/classes/websocket/snake/Snake.java | 3 +-- .../WEB-INF/classes/websocket/snake/SnakeAnnotation.java | 9 +++++---- webapps/examples/WEB-INF/classes/websocket/snake/SnakeTimer.java | 5 ++--- 4 files changed, 12 insertions(+), 9 deletions(-) diff --git a/webapps/docs/changelog.xml b/webapps/docs/changelog.xml index e0ccec8de6..65b12d85c4 100644 --- a/webapps/docs/changelog.xml +++ b/webapps/docs/changelog.xml @@ -217,6 +217,10 @@ Examples: Increase the number of previous messages displayed when using the WebSocket chat application. (markt) </update> + <fix> + Examples: Improve performance of WebSocket snake application when + multiple clients disconnect at the same time. (markt) + </fix> </changelog> </subsection> <subsection name="Other"> diff --git a/webapps/examples/WEB-INF/classes/websocket/snake/Snake.java b/webapps/examples/WEB-INF/classes/websocket/snake/Snake.java index 619a879c80..5936bf4303 100644 --- a/webapps/examples/WEB-INF/classes/websocket/snake/Snake.java +++ b/webapps/examples/WEB-INF/classes/websocket/snake/Snake.java @@ -67,8 +67,7 @@ public class Snake { try { session.getBasicRemote().sendText(msg); } catch (IOException ioe) { - CloseReason cr = - new CloseReason(CloseCodes.CLOSED_ABNORMALLY, ioe.getMessage()); + CloseReason cr = new CloseReason(CloseCodes.CLOSED_ABNORMALLY, ioe.getMessage()); try { session.close(cr); } catch (IOException ioe2) { diff --git a/webapps/examples/WEB-INF/classes/websocket/snake/SnakeAnnotation.java b/webapps/examples/WEB-INF/classes/websocket/snake/SnakeAnnotation.java index 37b1cf9626..442b5885ee 100644 --- a/webapps/examples/WEB-INF/classes/websocket/snake/SnakeAnnotation.java +++ b/webapps/examples/WEB-INF/classes/websocket/snake/SnakeAnnotation.java @@ -75,6 +75,9 @@ public class SnakeAnnotation { @OnOpen public void onOpen(Session session) { + // If the messages take longer than TICK_DELAY to be sent, the game isn't going to work properly. + session.getUserProperties().put("org.apache.tomcat.websocket.BLOCKING_SEND_TIMEOUT", + Long.valueOf(SnakeTimer.TICK_DELAY)); this.snake = new Snake(id, session); SnakeTimer.addSnake(snake); StringBuilder sb = new StringBuilder(); @@ -87,8 +90,7 @@ public class SnakeAnnotation { sb.append(','); } } - SnakeTimer.broadcast(String.format("{\"type\": \"join\",\"data\":[%s]}", - sb.toString())); + SnakeTimer.broadcast(String.format("{\"type\": \"join\",\"data\":[%s]}", sb.toString())); } @@ -109,8 +111,7 @@ public class SnakeAnnotation { @OnClose public void onClose() { SnakeTimer.removeSnake(snake); - SnakeTimer.broadcast(String.format("{\"type\": \"leave\", \"id\": %d}", - Integer.valueOf(id))); + SnakeTimer.broadcast(String.format("{\"type\": \"leave\", \"id\": %d}", Integer.valueOf(id))); } diff --git a/webapps/examples/WEB-INF/classes/websocket/snake/SnakeTimer.java b/webapps/examples/WEB-INF/classes/websocket/snake/SnakeTimer.java index 6b777e94e3..872f2dcddc 100644 --- a/webapps/examples/WEB-INF/classes/websocket/snake/SnakeTimer.java +++ b/webapps/examples/WEB-INF/classes/websocket/snake/SnakeTimer.java @@ -36,7 +36,7 @@ public class SnakeTimer { private static Timer gameTimer = null; - private static final long TICK_DELAY = 100; + static final long TICK_DELAY = 100; private static final ConcurrentHashMap<Integer, Snake> snakes = new ConcurrentHashMap<>(); @@ -73,8 +73,7 @@ public class SnakeTimer { sb.append(','); } } - broadcast(String.format("{\"type\": \"update\", \"data\" : [%s]}", - sb.toString())); + broadcast(String.format("{\"type\": \"update\", \"data\" : [%s]}", sb.toString())); } protected static void broadcast(String message) { --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org