鉴于节点的异步特性,很难对一系列Web请求计时。我会如何解决100个网络请求,并找出每个请求需要多长时间?了解操作系统将只允许少量并发的Web请求,我如何获得每个WebRequest的时间,消除等待其他连接完成的时间。我希望套接字事件在请求启动时被触发,但似乎套接字事件在连接建立后被触发。node.js中的时间web请求
var http = require('http');
var urls = [
'/cameron',
'/sara',
'...',
// Time a url collection.
function timeUrl(url, calback) {
var options = {
host: 'www.examplesite.com',
port: 80,
path: ''
};
var times = [];
times.push({'text': 'start', 'time':Date.now()});
http.get(options, function(res) {
times.push({'text': 'response', 'time':Date.now()});
var result = '';
res.on('data', function(chunk) {
result += chunk.length ;
// result += chunk;
});
res.on('end', function() {
times.push({'text': 'end', 'time': Date.now(), 'body': result, 'statusCode': res.statusCode}); // ,
calback(times);
});
}).on('error', function(e) {
calback();
console.log("Got error: " + e.message);
times.push({'error':Date.now()});
}).on('socket', function (response) {
times.push({'text': 'socket', 'time':Date.now()});
});
}
for (var i = 0; i < urls.length; i++) {
var url = urls[i];
timeUrl(url, function(times) {
console.log(url);
for (var i = 0; i < times.length; i++) {
console.log(times[i].text, times[i].time - times[1].time , 'ms');
}
console.log('statusCode:', times[times.length -1].statusCode, 'Response Size:', times[times.length -1].body);
console.log('-');
});
}
这有效,是否有动态知道CONCURRENCY字段应该是什么? – JustEngland
不是我所知道的。然而现在大多数浏览器都带有[16个并发连接](http://www.browserscope.org/?category=network)(参见Max Connections列),如果他们仍然是这样的话在操作系统级别上受到限制。因此将其设置为16将是一个合理的保守限制 - 它会使您的测试运行速度更慢(并发性更低),但更可靠。 – zzen