Skip to content

Commit 9ba5b4d

Browse files
committed
Bump sttp version and beautify WebsocketEcho
1 parent 93975f4 commit 9ba5b4d

File tree

3 files changed

+28
-22
lines changed

3 files changed

+28
-22
lines changed

build.sbt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ val activemqVersion = "5.18.5" // We are stuck with 5.x
1616
val artemisVersion = "2.37.0"
1717
val testContainersVersion = "1.20.4"
1818
val keycloakVersion = "26.0.1"
19-
val sttpVersion = "3.9.0"
19+
val sttpVersion = "3.10.1"
2020
val influxdbVersion = "7.1.0"
2121
val awsClientVersion = "2.25.32"
2222
val gatlingVersion = "3.12.0"

src/main/resources/WebsocketEcho.html

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
<head>
55
<meta charset="utf-8">
66
<title>Simple websocket Client</title>
7-
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
7+
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.7.1/jquery.min.js"></script>
88
</head>
99
<body>
1010
<input type="button" onclick="connectToWS()" value="Connect to:"/>
@@ -19,17 +19,17 @@
1919
<ul id="messages"></ul>
2020

2121
<script type="text/javascript">
22-
var $messages = $("#messages");
23-
var echoWebSocket;
22+
let $messages = $("#messages");
23+
let echoWebSocket;
2424

2525
function connectToWS() {
26-
var endpoint_echo = document.getElementById("endpoint_echo").value;
26+
let endpoint_echo = document.getElementById("endpoint_echo").value;
2727
if (echoWebSocket !== undefined) {
2828
echoWebSocket.close()
2929
}
3030
echoWebSocket = new WebSocket(endpoint_echo);
3131
echoWebSocket.onmessage = function (event) {
32-
var leng;
32+
let leng;
3333
if (event.data.size === undefined) {
3434
leng = event.data.length
3535
} else {
@@ -38,7 +38,7 @@
3838
$messages.prepend($("<li>" + event.data + "</li>"))
3939
console.log("onmessage. size: " + leng + ", content: " + event.data);
4040
};
41-
echoWebSocket.onopen = function (evt) {
41+
echoWebSocket.onopen = function () {
4242
$messages.prepend($("<li>OPEN</li>"))
4343
console.log("onopen state client: " + echoWebSocket.readyState);
4444
};
@@ -48,21 +48,21 @@
4848
// If the server closes correctly, we get a 1000 (= Normal Closure) code
4949
console.log("onclose - state client: " + echoWebSocket.readyState + " Reason server: " + evt.code);
5050
};
51-
echoWebSocket.onerror = function (evt) {
51+
echoWebSocket.onerror = function () {
5252
console.log("Error!");
5353
};
5454
}
5555

56-
var heartbeatWebSocket;
56+
let heartbeatWebSocket;
5757

5858
function connectToWSHeartbeat() {
59-
var endpoint_heartbeat = document.getElementById("endpoint_heartbeat").value;
59+
let endpoint_heartbeat = document.getElementById("endpoint_heartbeat").value;
6060
if (heartbeatWebSocket !== undefined) {
6161
heartbeatWebSocket.close()
6262
}
6363
heartbeatWebSocket = new WebSocket(endpoint_heartbeat);
6464
heartbeatWebSocket.onmessage = function (event) {
65-
var leng;
65+
let leng;
6666
if (event.data.size === undefined) {
6767
leng = event.data.length
6868
} else {
@@ -71,7 +71,7 @@
7171
$messages.prepend($("<li>" + event.data + "</li>"))
7272
console.log("onmessage. size: " + leng + ", content: " + event.data);
7373
};
74-
heartbeatWebSocket.onopen = function (evt) {
74+
heartbeatWebSocket.onopen = function () {
7575
$messages.prepend($("<li>OPEN</li>"))
7676
console.log("onopen state client: " + heartbeatWebSocket.readyState);
7777
console.log("Requesting heartbeat stream...");
@@ -80,7 +80,7 @@
8080
heartbeatWebSocket.onclose = function (evt) {
8181
$messages.prepend($("<li>CLOSED</li>"))
8282
// https://developer.mozilla.org/en-US/docs/Web/API/CloseEvent#status_codes
83-
// If the server does not close, we would get a 1006 (= Abnormal Closure) code
83+
// If the server does not close explicitly, we get a 1006 (= Abnormal Closure) code
8484
console.log("onclose - state client: " + heartbeatWebSocket.readyState + " Reason server: " + evt.code);
8585
};
8686
heartbeatWebSocket.onerror = function (evt) {
@@ -90,7 +90,7 @@
9090

9191

9292
function sendMsg() {
93-
var message = document.getElementById("myMessage").value;
93+
let message = document.getElementById("myMessage").value;
9494
echoWebSocket.send("Browser-" + message);
9595
}
9696

src/main/scala/akkahttp/WebsocketEcho.scala

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -59,16 +59,16 @@ trait ClientCommon {
5959

6060
/**
6161
* Websocket echo example with different client types
62-
* Each client instance produces it's own `echoFlow` on the server
62+
* Each client instance produces its own `echoFlow` on the server
6363
*
6464
* Clients do not close (implicitly) due to config:
6565
* `http.server.websocket.periodic-keep-alive-max-idle`
6666
* see file `application.conf` for details
6767
*
68-
* Currently akka http has no user API for websocket close
68+
* Like akka-http, pekko-http has no built-in API for websocket close
6969
* see: https://github.com/akka/akka-http/issues/2458
7070
*
71-
* Already possible explicit client closing scenarios:
71+
* Already implemented explicit client closing patterns:
7272
* - [[akkahttp.WebsocketEcho.serverHeartbeatStreamClient]] shows an explicit client closing scenario (also from Browser)
7373
* Inspired by: https://discuss.lightbend.com/t/websocket-connection-does-not-terminate-even-when-client-tries-to-close-it/8285
7474
* - [[akkahttp.WebsocketEcho.singleWebSocketRequestSourceQueueClient]]
@@ -287,11 +287,17 @@ object WebsocketEcho extends App with WebSocketDirectives with ClientCommon {
287287
def useWebSocket(ws: WebSocket[Future]): Future[Unit] = {
288288
def send(payload: String) = ws.sendText(payload)
289289
def receive() = ws.receiveText().map(t => logger.info(s"sttpClient $id received: $t"))
290-
for {
291-
_ <- send(s"$id-1 sttpClient")
292-
_ <- send(s"$id-2 sttpClient")
293-
_ <- receive()
294-
} yield ()
290+
291+
val messages = (1 to 5).map(i => s"$id-$i sttpClient")
292+
293+
messages.foldLeft(Future.successful(())) { (prev, msg) =>
294+
prev.flatMap { _ =>
295+
for {
296+
_ <- send(msg)
297+
_ <- receive()
298+
} yield ()
299+
}
300+
}
295301
}
296302

297303
val backend = PekkoHttpBackend()

0 commit comments

Comments
 (0)