aboutsummaryrefslogtreecommitdiff
path: root/bench/websocket-server/chat-server.node.mjs
diff options
context:
space:
mode:
authorGravatar Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com> 2022-10-18 21:59:47 -0700
committerGravatar Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com> 2022-10-18 22:16:51 -0700
commit9c7eb75a9ac845d92bfdfd6cc574dc8f39bde293 (patch)
tree57b0e3ba3b6248067f93bcf6a4d25a961bb873e9 /bench/websocket-server/chat-server.node.mjs
parentb0fe1679107541ef5691111f55a7b3db9a81457d (diff)
downloadbun-9c7eb75a9ac845d92bfdfd6cc574dc8f39bde293.tar.gz
bun-9c7eb75a9ac845d92bfdfd6cc574dc8f39bde293.tar.zst
bun-9c7eb75a9ac845d92bfdfd6cc574dc8f39bde293.zip
websocker-server
Diffstat (limited to 'bench/websocket-server/chat-server.node.mjs')
-rw-r--r--bench/websocket-server/chat-server.node.mjs52
1 files changed, 52 insertions, 0 deletions
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);
+}