• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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