doc: mention `binary` as deafult for Hash strings
[platform/upstream/nodejs.git] / benchmark / http / client-request-body.js
1 // Measure the time it takes for the HTTP client to send a request body.
2
3 var common = require('../common.js');
4 var http = require('http');
5
6 var bench = common.createBenchmark(main, {
7   dur: [5],
8   type: ['asc', 'utf', 'buf'],
9   bytes: [32, 256, 1024],
10   method: ['write', 'end  '] // two spaces added to line up each row
11 });
12
13 function main(conf) {
14   var dur = +conf.dur;
15   var len = +conf.bytes;
16
17   var encoding;
18   var chunk;
19   switch (conf.type) {
20     case 'buf':
21       chunk = new Buffer(len);
22       chunk.fill('x');
23       break;
24     case 'utf':
25       encoding = 'utf8';
26       chunk = new Array(len / 2 + 1).join('ΓΌ');
27       break;
28     case 'asc':
29       chunk = new Array(len + 1).join('a');
30       break;
31   }
32
33   var nreqs = 0;
34   var options = {
35     headers: { 'Connection': 'keep-alive', 'Transfer-Encoding': 'chunked' },
36     agent: new http.Agent({ maxSockets: 1 }),
37     host: '127.0.0.1',
38     port: common.PORT,
39     path: '/',
40     method: 'POST'
41   };
42
43   var server = http.createServer(function(req, res) {
44     res.end();
45   });
46   server.listen(options.port, options.host, function() {
47     setTimeout(done, dur * 1000);
48     bench.start();
49     pummel();
50   });
51
52   function pummel() {
53     var req = http.request(options, function(res) {
54       nreqs++;
55       pummel();  // Line up next request.
56       res.resume();
57     });
58     if (conf.method === 'write') {
59       req.write(chunk, encoding);
60       req.end();
61     } else {
62       req.end(chunk, encoding);
63     }
64   }
65
66   function done() {
67     bench.end(nreqs);
68   }
69 }