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(); framework-multiple'>examples/framework-multiple Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/packages/astro/performance/fixtures/utils (unfollow)
AgeCommit message (Expand)AuthorFilesLines
2023-08-22Fix turbolink changesetGravatar bluwy 5-5/+1
2023-08-22chore: update lock fileGravatar Emanuele Stoppa 1-9/+151
2023-08-22chore: update bug report to use the `astro info` command (#8175)Gravatar Emanuele Stoppa 1-25/+5
2023-08-22Remove turbolinks integration (#8186)Gravatar Bjorn Lu 8-317/+0
2023-08-22[ci] formatGravatar ematipico 2-35/+42
2023-08-22add: config error if `outDir` is inside `publicDir` (#8152)Gravatar André Alves 3-0/+13
2023-08-22Deprecate drafts feature (#8099)Gravatar Bjorn Lu 7-7/+41
2023-08-21Use more permissive type for `defineCollection` schema option (#8163)Gravatar Chris Swithinbank 2-5/+7
2023-08-21feat: style scoped hash is lowercase (#8180)Gravatar Emanuele Stoppa 4-7/+48
2023-08-21RC Release candidate (#8179)Gravatar Matthew Phillips 2-1/+32
2023-08-21Set Markdoc integration version to a minor (#8177)Gravatar Matthew Phillips 1-1/+1
2023-08-21fix(@astrojs/node): handler should work with `express` (#8176)Gravatar Emanuele Stoppa 7-16/+221
2023-08-21[docs] deprecate build.split and build.excludeMiddleware in config ref (#8158)Gravatar Sarah Rainsberger 1-25/+7
2023-08-21chore: lock fileGravatar Emanuele Stoppa 1-0/+4
2023-08-21[ci] formatGravatar natemoo-re 4-9/+15
2023-08-21Stringify shouldn't throw on user object during rendering (#8127)Gravatar Nate Moore 9-46/+115
2023-08-21[ci] formatGravatar natemoo-re 1-1/+4
2023-08-21fix(dev): open to base path (#8123)Gravatar Nate Moore 2-1/+8
2023-08-21chore(gitpod): resolve potential globbing and word splitting issue (#8124)Gravatar Ben Elan 1-1/+1
2023-08-21fix(#6965): fix build stats (#8122)Gravatar Nate Moore 2-1/+8
2023-08-21only update our own history entires during back navigation through view trans...Gravatar Martin Trapp 2-3/+11
2023-08-21fix: reinsert attribute to specify direction of ViewTransition (forward / bac...Gravatar Martin Trapp 2-7/+12
2023-08-21Remove deprecated APIs (#8170)Gravatar Bjorn Lu 4-107/+5
2023-08-21Remove pre-shiki v0.14 theme names (#8169)Gravatar Bjorn Lu 6-80/+14
2023-08-21[docs] JSX framework integration READMEs (#8151)Gravatar Sarah Rainsberger 3-0/+104
2023-08-21fix(assets): Add missing type for imageConfig export (#8171)Gravatar Erika 2-1/+7
2023-08-21Deprecate simple objects from endpoints (#8132)Gravatar Bjorn Lu 20-201/+243
2023-08-18[docs] update scopedStyleStragegy default and description (#8148)Gravatar Sarah Rainsberger 1-2/+2
2023-08-18[ci] release (#8145)astro@2.10.12@astrojs/react@2.3.2@astrojs/node@5.3.5Gravatar Houston (Bot) 46-92/+98
2023-08-18Fix missing package file regression (#8149)Gravatar Matthew Phillips 2-1/+7
2023-08-18fix(node): delegate preview's not found and error handling to core/app (#8141)Gravatar Arsh 2-9/+6
2023-08-18Replace `class:list` implementation with `clsx` (#8142)Gravatar Nate Moore 12-68/+133
2023-08-18[ci] formatGravatar matthewp 1-1/+4
2023-08-18fix(data collections): normalize file paths for DataEntry.id (#8144)Gravatar Arsh 2-1/+6
2023-08-18[ci] release (beta) (#8140)astro@3.0.0-beta.4Gravatar Houston (Bot) 41-65/+72
2023-08-18[error messages] Update image errors-data.ts (#8126)Gravatar Sarah Rainsberger 1-12/+12
2023-08-18fix(polyfills): Use object shape for Stackblitz polyfill listGravatar Princesseuh 1-2/+2
2023-08-18fix: polyfill File using undici instead of node:buffer (#8139)Gravatar Erika 2-8/+9
2023-08-18[ci] release (beta) (#8073)create-astro@4.0.0-beta.1astro@3.0.0-beta.3@astrojs/vercel@4.0.0-beta.3@astrojs/telemetry@3.0.0-beta.2@astrojs/svelte@4.0.0-beta.1@astrojs/solid-js@3.0.0-beta.2@astrojs/react@3.0.0-beta.3@astrojs/mdx@1.0.0-beta.1@astrojs/cloudflare@7.0.0-beta.2Gravatar Houston (Bot) 63-117/+389
2023-08-18[ci] release (#8138)astro@2.10.11@astrojs/react@2.3.1Gravatar Houston (Bot) 44-80/+82
2023-08-18[ci] formatGravatar natemoo-re 1-1/+1
2023-08-18Fix 404 response leading to an infinite loop when there is no 404 page (#8136)Gravatar André Alves 2-1/+10
2023-08-18fix(react): add missing export (#8137)Gravatar Nate Moore 2-1/+7
2023-08-18[ci] release (#8096)create-astro@3.2.2astro@2.10.10@astrojs/vercel@3.8.2@astrojs/svelte@3.1.1@astrojs/solid-js@2.2.1@astrojs/react@2.3.0Gravatar Houston (Bot) 63-197/+186
2023-08-18changeset(next): inlineStylesheets default switch is major (#8133)Gravatar Arsh 1-1/+1
2023-08-18feat: add polyfills for stackblitz (#8130)Gravatar Erika 7-6/+86