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-client.mjs | 182 +++++++++++++++++++++++++++++++++ 1 file changed, 182 insertions(+) create mode 100644 bench/websocket-server/chat-client.mjs (limited to 'bench/websocket-server/chat-client.mjs') diff --git a/bench/websocket-server/chat-client.mjs b/bench/websocket-server/chat-client.mjs new file mode 100644 index 000000000..786ebde1c --- /dev/null +++ b/bench/websocket-server/chat-client.mjs @@ -0,0 +1,182 @@ +const env = + "process" in globalThis + ? process.env + : "Deno" in globalThis + ? Deno.env.toObject() + : {}; + +const SERVER = env.SERVER || "ws://0.0.0.0:4001"; +const WebSocket = globalThis.WebSocket || (await import("ws")).WebSocket; +const LOG_MESSAGES = env.LOG_MESSAGES === "1"; +const CLIENTS_TO_WAIT_FOR = parseInt(env.CLIENTS_COUNT || "", 10) || 16; +const DELAY = 64; +const MESSAGES_TO_SEND = Array.from({ length: 32 }, () => [ + "Hello World!", + "Hello World! 1", + "Hello World! 2", + "Hello World! 3", + "Hello World! 4", + "Hello World! 5", + "Hello World! 6", + "Hello World! 7", + "Hello World! 8", + "Hello World! 9", + "What is the meaning of life?", + "where is the bathroom?", + "zoo", + "kangaroo", + "erlang", + "elixir", + "bun", + "mochi", + "typescript", + "javascript", + "Hello World! 7", + "Hello World! 8", + "Hello World! 9", + "What is the meaning of life?", + "where is the bathroom?", + "zoo", + "kangaroo", + "erlang", + "elixir", + "bun", + "mochi", + "typescript", + "javascript", + "Hello World! 7", + "Hello World! 8", + "Hello World! 9", + "What is the meaning of life?", + "Hello World! 7", + "Hello World! 8", + "Hello World! 9", + "What is the meaning of life?", + "where is the bathroom?", + "zoo", + "kangaroo", + "erlang", + "elixir", + "bun", + "mochi", + "typescript", + "javascript", +]).flat(); + +const NAMES = Array.from({ length: 50 }, (a, i) => [ + "Alice" + i, + "Bob" + i, + "Charlie" + i, + "David" + i, + "Eve" + i, + "Frank" + i, + "Grace" + i, + "Heidi" + i, + "Ivan" + i, + "Judy" + i, + "Karl" + i, + "Linda" + i, + "Mike" + i, + "Nancy" + i, + "Oscar" + i, + "Peggy" + i, + "Quentin" + i, + "Ruth" + i, + "Steve" + i, + "Trudy" + i, + "Ursula" + i, + "Victor" + i, + "Wendy" + i, + "Xavier" + i, + "Yvonne" + i, + "Zach" + i, +]) + .flat() + .slice(0, CLIENTS_TO_WAIT_FOR); + +console.log(`Connecting ${CLIENTS_TO_WAIT_FOR} WebSocket clients...`); +console.time(`All ${CLIENTS_TO_WAIT_FOR} clients connected`); + +var remainingClients = CLIENTS_TO_WAIT_FOR; +var promises = []; + +const clients = new Array(CLIENTS_TO_WAIT_FOR); +for (let i = 0; i < CLIENTS_TO_WAIT_FOR; i++) { + clients[i] = new WebSocket(`${SERVER}?name=${NAMES[i]}`); + promises.push( + new Promise((resolve, reject) => { + clients[i].onmessage = (event) => { + resolve(); + }; + }) + ); +} + +await Promise.all(promises); +console.timeEnd(`All ${clients.length} clients connected`); + +var received = 0; +var total = 0; +var more = false; +var remaining; + +for (let i = 0; i < CLIENTS_TO_WAIT_FOR; i++) { + clients[i].onmessage = (event) => { + if (LOG_MESSAGES) console.log(event.data); + received++; + remaining--; + + if (remaining === 0) { + more = true; + remaining = total; + } + }; +} + +// each message is supposed to be received +// by each client +// so its an extra loop +for (let i = 0; i < CLIENTS_TO_WAIT_FOR; i++) { + for (let j = 0; j < MESSAGES_TO_SEND.length; j++) { + for (let k = 0; k < CLIENTS_TO_WAIT_FOR; k++) { + total++; + } + } +} +remaining = total; + +function restart() { + for (let i = 0; i < CLIENTS_TO_WAIT_FOR; i++) { + for (let j = 0; j < MESSAGES_TO_SEND.length; j++) { + clients[i].send(MESSAGES_TO_SEND[j]); + } + } +} + +var runs = []; +setInterval(() => { + const last = received; + runs.push(last); + received = 0; + console.log( + last, + `messages per second (${CLIENTS_TO_WAIT_FOR} clients x ${MESSAGES_TO_SEND.length} msg, min delay: ${DELAY}ms)` + ); + + if (runs.length >= 10) { + console.log("10 runs"); + console.log(JSON.stringify(runs, null, 2)); + if ("process" in globalThis) process.exit(0); + runs.length = 0; + } +}, 1000); +var isRestarting = false; +setInterval(() => { + if (more && !isRestarting) { + more = false; + isRestarting = true; + restart(); + isRestarting = false; + } +}, DELAY); +restart(); -- cgit v1.2.3 Unnamed repository; edit this file 'description' to name the repository.
aboutsummaryrefslogtreecommitdiff
path: root/docs/guides/websocket/simple.md (unfollow)
AgeCommit message (Expand)AuthorFilesLines
2023-10-17Remove ancient changelogGravatar Ashcon Partovi 1-11/+0
2023-10-17docs: fix ws.publish (#6558)Gravatar Aral Roca Gomez 1-1/+1
2023-10-17perf(bun-types): remove needless some call (#6550)Gravatar Mikhail 1-1/+1
2023-10-16fix(runtime): make some things more stable (partial jsc debug build) (#5881)Gravatar dave caruso 116-1446/+1830
2023-10-16fix(runtime): improve IPC reliability + organization pass on that code (#6475)Gravatar dave caruso 15-98/+266
2023-10-16Simplify getting Set of extentions (#4975)Gravatar Mikhail 1-3/+3
2023-10-16Fix formattingGravatar Ashcon Partovi 1-3/+1
2023-10-16fix(test): when tests run with --only the nested describe blocks `.on… (#5616)Gravatar Igor Shapiro 2-13/+45
2023-10-16perf(node:events): optimize `emit(...)` function (#5485)Gravatar Yannik Schröder 3-11/+132
2023-10-16fix: don't remove content-encoding header from header table (#5743)Gravatar Liz 2-2/+25
2023-10-16fix(sqlite) Insert .all() does not return an array #5872 (#5946)Gravatar Hugo Galan 2-7/+11
2023-10-16Fix formattingGravatar Ashcon Partovi 2-5/+4
2023-10-16Fix `Response.statusText` (#6151)Gravatar Chris Toshok 10-238/+269
2023-10-16fix-subprocess-argument-missing (#6407)Gravatar Nicolae-Rares Ailincai 4-2/+40
2023-10-16Add type parameter to `expect` (#6128)Gravatar Voldemat 1-3/+3
2023-10-16fix(node:worker_threads): ensure threadId property is exposed on worker_threa...Gravatar Jérôme Benoit 6-15/+75
2023-10-16Fix use before define bug in sqliteGravatar Ashcon Partovi 2-5/+5
2023-10-16fix(jest): fix toStrictEqual on same URLs (#6528)Gravatar João Alisson 2-13/+16
2023-10-16Fix `toHaveBeenCalled` having wrong error signatureGravatar Ashcon Partovi 1-2/+2
2023-10-16Fix formattingGravatar Ashcon Partovi 1-2/+1
2023-10-16Add `reusePort` to `Bun.serve` typesGravatar Ashcon Partovi 1-0/+9
2023-10-16Fix `request.url` having incorrect portGravatar Ashcon Partovi 4-1/+92
2023-10-16Remove uWebSockets header from Bun.serve responsesGravatar Ashcon Partovi 1-6/+6
2023-10-16Rename some testsGravatar Ashcon Partovi 3-0/+0
2023-10-16Fix #6467Gravatar Ashcon Partovi 2-3/+10
2023-10-16Update InternalModuleRegistryConstants.hGravatar Dylan Conway 1-3/+3
2023-10-16Development -> Contributing (#6538)Gravatar Colin McDonnell 2-1/+1
2023-10-14fix(net/tls) fix pg hang on end + hanging on query (#6487)Gravatar Ciro Spaciari 3-8/+36
2023-10-13fix installing dependencies that match workspace versions (#6494)Gravatar Dylan Conway 4-2/+64
2023-10-13fix lockfile struct padding (#6495)Gravatar Dylan Conway 3-3/+18