• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1'use strict';
2
3const common = require('../common.js');
4const PORT = common.PORT;
5
6const bench = common.createBenchmark(main, {
7  n: [1e3],
8  nheaders: [0, 10, 100, 1000]
9}, { flags: ['--no-warnings'] });
10
11function main({ n, nheaders }) {
12  const http2 = require('http2');
13  const server = http2.createServer({
14    maxHeaderListPairs: 20000
15  });
16
17  const headersObject = {
18    ':path': '/',
19    ':scheme': 'http',
20    'accept-encoding': 'gzip, deflate',
21    'accept-language': 'en',
22    'content-type': 'text/plain',
23    'referer': 'https://example.org/',
24    'user-agent': 'SuperBenchmarker 3000'
25  };
26
27  for (let i = 0; i < nheaders; i++) {
28    headersObject[`foo${i}`] = `some header value ${i}`;
29  }
30
31  server.on('stream', (stream) => {
32    stream.respond();
33    stream.end('Hi!');
34  });
35  server.listen(PORT, () => {
36    const client = http2.connect(`http://localhost:${PORT}/`, {
37      maxHeaderListPairs: 20000
38    });
39
40    function doRequest(remaining) {
41      const req = client.request(headersObject);
42      req.resume();
43      req.on('end', () => {
44        if (remaining > 0) {
45          doRequest(remaining - 1);
46        } else {
47          bench.end(n);
48          server.close();
49          client.destroy();
50        }
51      });
52    }
53
54    bench.start();
55    doRequest(n);
56  });
57}
58