1'use strict'; 2 3const myModule = process.argv[2]; 4if (!['http', 'http2'].includes(myModule)) { 5 throw new Error(`Invalid module for benchmark test double: ${myModule}`); 6} 7 8const http = require(myModule); 9 10const duration = +process.env.duration; 11const url = process.env.test_url; 12 13const start = process.hrtime(); 14let throughput = 0; 15 16function request(res, client) { 17 res.resume(); 18 res.on('error', () => {}); 19 res.on('end', () => { 20 throughput++; 21 const [sec, nanosec] = process.hrtime(start); 22 const ms = sec * 1000 + nanosec / 1e6; 23 if (ms < duration * 1000) { 24 run(); 25 } else { 26 console.log(JSON.stringify({ throughput })); 27 if (client) { 28 client.destroy(); 29 process.exit(0); 30 } 31 } 32 }); 33} 34 35function run() { 36 if (http.get) { // HTTP 37 http.get(url, request); 38 } else { // HTTP/2 39 const client = http.connect(url); 40 client.on('error', (e) => { throw e; }); 41 request(client.request(), client); 42 } 43} 44 45run(); 46