aboutsummaryrefslogtreecommitdiff
path: root/bench/socketio/client.js
diff options
context:
space:
mode:
Diffstat (limited to 'bench/socketio/client.js')
-rw-r--r--bench/socketio/client.js61
1 files changed, 61 insertions, 0 deletions
diff --git a/bench/socketio/client.js b/bench/socketio/client.js
new file mode 100644
index 000000000..066a06483
--- /dev/null
+++ b/bench/socketio/client.js
@@ -0,0 +1,61 @@
+const { io } = require("socket.io-client");
+const port = process.env.PORT || 3000;
+
+const URL = `ws://localhost:${port}`;
+const MAX_CLIENTS = 250;
+const BATCHSIZE = MAX_CLIENTS / 10;
+const BATCH_INTERVAL_IN_MS = 1000;
+const EMIT_INTERVAL_IN_MS = 50;
+
+let clientCount = 0;
+let lastReport = new Date().getTime();
+let packetsSinceLastReport = 0;
+
+const clients = [];
+const createClient = () => {
+ const socket = io(URL);
+ clients.push(socket);
+
+ socket.on("server to client event", () => {
+ packetsSinceLastReport++;
+ });
+
+ socket.on("disconnect", reason => {
+ console.log(`disconnect due to ${reason}`);
+ });
+};
+
+let emitInterval = null;
+
+const createClients = () => {
+ for (let i = 0; i < BATCHSIZE; i++) {
+ createClient();
+ clientCount++;
+ }
+
+ if (clientCount < MAX_CLIENTS) {
+ setTimeout(createClients, BATCH_INTERVAL_IN_MS);
+ }
+ if (!emitInterval) {
+ emitInterval = setInterval(() => {
+ clients.forEach(socket => {
+ socket.emit("client to server event", "hello world");
+ });
+ }, EMIT_INTERVAL_IN_MS);
+ }
+};
+
+createClients();
+
+const printReport = () => {
+ const now = new Date().getTime();
+ const durationSinceLastReport = (now - lastReport) / 1000;
+ const packetsPerSeconds = (packetsSinceLastReport / durationSinceLastReport).toFixed(2);
+
+ console.log(`client count: ${clientCount} ; average packets received per second: ${packetsPerSeconds}`);
+
+ packetsSinceLastReport = 0;
+ lastReport = now;
+};
+
+setInterval(printReport, 1000);