aboutsummaryrefslogtreecommitdiff
path: root/bench/websocket-server/chat-server.deno.mjs
diff options
context:
space:
mode:
Diffstat (limited to 'bench/websocket-server/chat-server.deno.mjs')
-rw-r--r--bench/websocket-server/chat-server.deno.mjs48
1 files changed, 48 insertions, 0 deletions
diff --git a/bench/websocket-server/chat-server.deno.mjs b/bench/websocket-server/chat-server.deno.mjs
new file mode 100644
index 000000000..3cea9cf2f
--- /dev/null
+++ b/bench/websocket-server/chat-server.deno.mjs
@@ -0,0 +1,48 @@
+// See ./README.md for instructions on how to run this benchmark.
+const port = Deno.env.get("PORT") || 4001;
+const CLIENTS_TO_WAIT_FOR =
+ parseInt(Deno.env.get("CLIENTS_COUNT") || "", 10) || 16;
+
+var clients = [];
+async function reqHandler(req) {
+ if (req.headers.get("upgrade") != "websocket") {
+ return new Response(null, { status: 501 });
+ }
+ const { socket: client, response } = Deno.upgradeWebSocket(req);
+
+ clients.push(client);
+ const name = new URL(req.url).searchParams.get("name");
+
+ console.log(
+ `${name} connected (${CLIENTS_TO_WAIT_FOR - clients.length} remain)`
+ );
+
+ client.onmessage = (event) => {
+ const msg = `${name}: ${event.data}`;
+ for (let client of clients) {
+ client.send(msg);
+ }
+ };
+ client.onclose = () => {
+ clients.splice(clients.indexOf(client), 1);
+ };
+
+ if (clients.length === CLIENTS_TO_WAIT_FOR) {
+ sendReadyMessage();
+ }
+ return response;
+}
+
+function sendReadyMessage() {
+ console.log("All clients connected");
+ setTimeout(() => {
+ console.log("Starting benchmark");
+ for (let client of clients) {
+ client.send(`ready`);
+ }
+ }, 100);
+}
+
+console.log(`Waiting for ${CLIENTS_TO_WAIT_FOR} clients to connect..`);
+
+Deno.serve(reqHandler, { port });