From 9c7eb75a9ac845d92bfdfd6cc574dc8f39bde293 Mon Sep 17 00:00:00 2001 From: Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com> Date: Tue, 18 Oct 2022 21:59:47 -0700 Subject: websocker-server --- bench/websocket-server/chat-server.deno.mjs | 48 +++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 bench/websocket-server/chat-server.deno.mjs (limited to 'bench/websocket-server/chat-server.deno.mjs') 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 }); -- cgit v1.2.3