aboutsummaryrefslogtreecommitdiff
path: root/bench/websocket-server/chat-server.bun.js
diff options
context:
space:
mode:
Diffstat (limited to 'bench/websocket-server/chat-server.bun.js')
-rw-r--r--bench/websocket-server/chat-server.bun.js56
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}/`
+);