diff options
author | 2022-10-18 21:59:47 -0700 | |
---|---|---|
committer | 2022-10-18 22:16:51 -0700 | |
commit | 9c7eb75a9ac845d92bfdfd6cc574dc8f39bde293 (patch) | |
tree | 57b0e3ba3b6248067f93bcf6a4d25a961bb873e9 /bench/websocket-server/chat-server.bun.js | |
parent | b0fe1679107541ef5691111f55a7b3db9a81457d (diff) | |
download | bun-9c7eb75a9ac845d92bfdfd6cc574dc8f39bde293.tar.gz bun-9c7eb75a9ac845d92bfdfd6cc574dc8f39bde293.tar.zst bun-9c7eb75a9ac845d92bfdfd6cc574dc8f39bde293.zip |
websocker-server
Diffstat (limited to 'bench/websocket-server/chat-server.bun.js')
-rw-r--r-- | bench/websocket-server/chat-server.bun.js | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/bench/websocket-server/chat-server.bun.js b/bench/websocket-server/chat-server.bun.js new file mode 100644 index 000000000..b015dec7e --- /dev/null +++ b/bench/websocket-server/chat-server.bun.js @@ -0,0 +1,56 @@ +// See ./README.md for instructions on how to run this benchmark. +const CLIENTS_TO_WAIT_FOR = parseInt(process.env.CLIENTS_COUNT || "", 10) || 16; +var remainingClients = CLIENTS_TO_WAIT_FOR; +const COMPRESS = process.env.COMPRESS === "1"; +const port = process.PORT || 4001; + +const server = Bun.serve({ + port: port, + websocket: { + open(ws) { + ws.subscribe("room"); + + remainingClients--; + console.log(`${ws.data.name} connected (${remainingClients} remain)`); + + if (remainingClients === 0) { + console.log("All clients connected"); + setTimeout(() => { + console.log('Starting benchmark by sending "ready" message'); + ws.publishText("room", `ready`); + }, 100); + } + }, + message(ws, msg) { + const out = `${ws.data.name}: ${msg}`; + if (ws.publishText("room", out) !== out.length) { + throw new Error("Failed to publish message"); + } + }, + close(ws) { + remainingClients++; + }, + + perMessageDeflate: false, + }, + + fetch(req, server) { + if ( + server.upgrade(req, { + data: { + name: + new URL(req.url).searchParams.get("name") || + "Client #" + (CLIENTS_TO_WAIT_FOR - remainingClients), + }, + }) + ) + return; + + return new Response("Error"); + }, +}); + +console.log( + `Waiting for ${remainingClients} clients to connect...\n`, + ` http://${server.hostname}:${port}/` +); |