鑑於節點的異步特性,很難對一系列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