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.node.mjs | 52 +++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 bench/websocket-server/chat-server.node.mjs (limited to 'bench/websocket-server/chat-server.node.mjs') diff --git a/bench/websocket-server/chat-server.node.mjs b/bench/websocket-server/chat-server.node.mjs new file mode 100644 index 000000000..e57b9b982 --- /dev/null +++ b/bench/websocket-server/chat-server.node.mjs @@ -0,0 +1,52 @@ +// See ./README.md for instructions on how to run this benchmark. +const port = process.env.PORT || 4001; +const CLIENTS_TO_WAIT_FOR = parseInt(process.env.CLIENTS_COUNT || "", 10) || 16; + +import { createRequire } from "module"; +const require = createRequire(import.meta.url); +var WebSocketServer = require("ws").Server, + config = { + host: "0.0.0.0", + port, + }, + wss = new WebSocketServer(config, function () { + console.log(`Waiting for ${CLIENTS_TO_WAIT_FOR} clients to connect..`); + }); + +var clients = []; + +wss.on("connection", function (ws, { url }) { + const name = new URL(new URL(url, "http://localhost:3000")).searchParams.get( + "name" + ); + console.log( + `${name} connected (${CLIENTS_TO_WAIT_FOR - clients.length} remain)` + ); + clients.push(ws); + + ws.on("message", function (message) { + const out = `${name}: ${message}`; + for (let client of clients) { + client.send(out); + } + }); + + // when a connection is closed + ws.on("close", function (ws) { + clients.splice(clients.indexOf(ws), 1); + }); + + if (clients.length === CLIENTS_TO_WAIT_FOR) { + sendReadyMessage(); + } +}); + +function sendReadyMessage() { + console.log("All clients connected"); + setTimeout(() => { + console.log("Starting benchmark"); + for (let client of clients) { + client.send(`ready`); + } + }, 100); +} -- cgit v1.2.3