This is an automated email from the ASF dual-hosted git repository.
markt pushed a commit to branch 10.1.x
in repository https://gitbox.apache.org/repos/asf/tomcat.git
The following commit(s) were added to refs/heads/10.1.x by this push:
new 3cb29d58e2 Improve handling of multiple disconnects
3cb29d58e2 is described below
commit 3cb29d58e25862208700dc3aa05d716c7c0d5f69
Author: Mark Thomas <[email protected]>
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 3e6114bda0..ecd5c7e36b 100644
--- a/webapps/docs/changelog.xml
+++ b/webapps/docs/changelog.xml
@@ -195,6 +195,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: [email protected]
For additional commands, e-mail: [email protected]