const http = require('http') const n = 100; let connected = 0; let messages = 0; let start = Date.now(); let phase = 'connecting'; let connection_time; let broadcast_time; let message = process.argv[2] || 'msg'; let expected_data = "data: " + message; for (let i = 0; i < n; i++) { http.get({ host: 'localhost', port: 8080, path: '/events' }, response => { response.on('data', data => { if (data.includes(expected_data)) { messages += 1; } else if (data.includes("data: connected\n")) { connected += 1; } }) }).on('error', (_) => {}); } setInterval(() => { if (phase === 'connecting' && connected === n) { // done connecting phase = 'messaging'; connection_time = Date.now() - start; } if (phase === 'messaging') { phase = 'waiting'; start = Date.now(); http.get({ host: 'localhost', port: 8080, path: '/broadcast/' + message }, response => { response.on('data', _ => {}) }) } if (phase === 'waiting' && messages >= n) { // all messages received broadcast_time = Date.now() - start; phase = 'paused'; messages = 0; phase = 'messaging'; } process.stdout.write("\r\x1b[K"); process.stdout.write(`Connected: ${connected}, connection time: ${connection_time} ms, total broadcast time: ${broadcast_time} ms`); }, 20)