Skip to content
Closed
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
benchmark: more formatting improvements and simplification
  • Loading branch information
Rudi Cilibrasi committed Feb 17, 2015
commit 74246a04ff48168a1c618d95f326563bad9ce075
76 changes: 37 additions & 39 deletions benchmark/net/chunky_http_client.js
Original file line number Diff line number Diff line change
@@ -1,70 +1,68 @@
"use strict";
'use strict';

// test HTTP throughput in fragmented header case
var common = require('../common.js');
var net = require('net');
var test = require('../../test/common.js');

var bench = common.createBenchmark(main, {
// len: [1, 4, 8, 16, 32, 64, 128],
len: [1],
num: [5, 50, 500, 2000],
len: [1, 4, 8, 16, 32, 64, 128],
num: [5, 50, 500, 2000],
type: ['send'],
}
)
});


function main(conf) {
var len;
var num;
var type;
num = +conf.num;
len = +conf.len;
type = conf.type;
var len = +conf.len;
var num = +conf.num;
var type = conf.type;
var todo = [];
var headers = [];
// Chose 7 because 9 showed "Connection error" / "Connection closed"
// An odd number could result in a better length dispersion.
for (var i = 7; i <= 7*7*7; i *= 7)
for (var i = 7; i <= 7 * 7 * 7; i *= 7)
headers.push(Array(i + 1).join('o'));

function WriteWithCRLF(line) {
todo.push(line + '\r\n');
}

function WriteHTTPHeaders(channel, has_keep_alive, extra_header_count) {
todo = []
WriteWithCRLF('GET / HTTP/1.1');
WriteWithCRLF('Host: localhost');
WriteWithCRLF('Connection: keep-alive');
WriteWithCRLF('Accept: text/html,application/xhtml+xml,' +
'application/xml;q=0.9,image/webp,*/*;q=0.8');
WriteWithCRLF('User-Agent: Mozilla/5.0 (X11; Linux x86_64) ' +
'AppleWebKit/537.36 (KHTML, like Gecko) ' +
'Chrome/39.0.2171.71 Safari/537.36');
WriteWithCRLF('Accept-Encoding: gzip, deflate, sdch');
WriteWithCRLF('Accept-Language: en-US,en;q=0.8');
todo.push('GET / HTTP/1.1');
todo.push('Host: localhost');
todo.push('Connection: keep-alive');
todo.push('Accept: text/html,application/xhtml+xml,' +
'application/xml;q=0.9,image/webp,*/*;q=0.8');
todo.push('User-Agent: Mozilla/5.0 (X11; Linux x86_64) ' +
'AppleWebKit/537.36 (KHTML, like Gecko) ' +
'Chrome/39.0.2171.71 Safari/537.36');
todo.push('Accept-Encoding: gzip, deflate, sdch');
todo.push('Accept-Language: en-US,en;q=0.8');
for (var i = 0; i < extra_header_count; i++) {
// Utilize first three powers of a small integer for an odd cycle and
// because the fourth power of some integers overloads the server.
WriteWithCRLF('X-Header-' + i + ': ' + headers[i%3]);
todo.push('X-Header-' + i + ': ' + headers[i % 3]);
}
WriteWithCRLF('');
todo = todo.join('');
todo.push('');
todo.push('');
todo = todo.join('\r\n');
// Using odd numbers in many places may increase length coverage.
var chunksize = 37;
for (i = 0; i < todo.length; i+=chunksize) {
var cur = todo.slice(i,i+chunksize);
for (i = 0; i < todo.length; i += chunksize) {
var cur = todo.slice(i, i + chunksize);
channel.write(cur);
}
}

var success = 0, failure = 0, min = 10, size = 0;
var mod = 317, mult = 17, add = 11;
var success = 0;
var failure = 0;
var min = 10;
var size = 0;
var mod = 317;
var mult = 17;
var add = 11;
var count = 0;
var PIPE = test.PIPE;
var socket = net.connect(PIPE, function() {
bench.start();
WriteHTTPHeaders(socket, 1, +conf.len);
WriteHTTPHeaders(socket, 1, len);
socket.setEncoding('utf8')
socket.on('data', function(d) {
var did = false;
Expand Down Expand Up @@ -93,12 +91,12 @@ function main(conf) {
}
}
});
socket.on('close', function() {
console.log('Connection closed');
socket.on('close', function() {
console.log('Connection closed');
});

socket.on('error', function() {
console.log('Connection error');
socket.on('error', function() {
throw new Error('Connection error');
});
});
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Style: indentation seems off here.

}
42 changes: 21 additions & 21 deletions benchmark/net/http_server_for_chunky_client.js
Original file line number Diff line number Diff line change
@@ -1,11 +1,12 @@
"use strict";
'use strict';

var path = require('path');
var http = require('http');
var fs = require('fs');
var spawn = require('child_process').spawn;
var common = require('../common.js')
var test = require('../../test/common.js')
var pep = path.dirname(process.argv[1])+'/chunky_http_client.js';
var pep = path.dirname(process.argv[1]) + '/chunky_http_client.js';
var PIPE = test.PIPE;

var server;
Expand All @@ -20,28 +21,27 @@ server = http.createServer(function(req, res) {
});

server.on('error', function(err) {
console.error('Error:');
console.error(err);
throw new Error('server error: ' + err);
});

try {
server.listen(PIPE, 'localhost');
} catch(e) {
console.error('Error:');
console.error(e);
}
var child;

var child = spawn(process.execPath, [pep], { });
child.on('error', function(err) {
console.error('spawn error.');
console.error(err);
});
server.listen(PIPE);

child.stdout.on('data', function (data) {
process.stdout.write(data);
});
child = spawn(process.execPath, [pep], { });

child.on('error', function(err) {
throw new Error('spawn error: ' + err );
});

child.stdout.pipe(process.stdout);

child.on('exit', function (exitCode) {
console.error('Child exited with code: ' + exitCode);
});

} catch(e) {
throw new Error('error: ' + e );
}

child.on('exit', function (exitCode) {
console.error('Child exited with code: ' + exitCode);
process.exit(0);
});