| 'use strict'; |
| const common = require('../common.js'); |
| const http = require('http'); |
| |
| const bench = common.createBenchmark(main, { |
| connections: [50], // Concurrent connections |
| headers: [20], // Number of header lines to append after the common headers |
| w: [0, 6], // Amount of trailing whitespace |
| duration: 5, |
| }); |
| |
| function main({ connections, headers, w, duration }) { |
| const server = http.createServer((req, res) => { |
| res.end(); |
| }); |
| |
| server.listen(0, () => { |
| const headers = { |
| 'Content-Type': 'text/plain', |
| 'Accept': 'text/plain', |
| 'User-Agent': 'nodejs-benchmark', |
| 'Date': new Date().toString(), |
| 'Cache-Control': 'no-cache', |
| }; |
| for (let i = 0; i < headers; i++) { |
| // Note: |
| // - autocannon does not send header values with OWS |
| // - wrk can only send trailing OWS. This is a side-effect of wrk |
| // processing requests with http-parser before sending them, causing |
| // leading OWS to be stripped. |
| headers[`foo${i}`] = `some header value ${i}${' \t'.repeat(w / 2)}`; |
| } |
| bench.http({ |
| path: '/', |
| connections, |
| headers, |
| duration, |
| port: server.address().port, |
| }, () => { |
| server.close(); |
| }); |
| }); |
| } |