標籤:
關於nodejs能同時接受多少個請求的問題?
最近學習node,看了很多教程,都在讚揚nodejs的非同步I/O,非同步I/O的特點就是,每接收一個請求,使用非同步呼叫處理請求,不用等待結果,可以繼續運行其他動作,也就是說可以繼續接受請求。那它到底能接受?於是,我寫了個程式來測試,代碼如下:
// server.js// 處理一個請求需要5秒,通過setTimeout設定5秒後響應var http = require("http");var n = 0;http.createServer(function (req, res) { n++; setTimeout(function() { console.log("Accept " + n + "request."); res.end("test"); }, 5000);}).listen(3000);
// client.js// 發送一個請求exports.send = function () { var http = require(‘http‘); var options = { host: ‘localhost‘, port: ‘3000‘, path: ‘/‘, method: ‘GET‘, }; var req = http.request(options, function(res){ exports.counter += 1; res.setEncoding(‘utf8‘); res.on(‘data‘, function (c) { //console.log(c); }); res.on(‘end‘, function() { exports.seccess += 1; console.log("Response: " + exports.seccess); }); }); req.end();};exports.seccess = 0;
// attack.js// 在1秒內發出約50000個請求var client = require(‘./client‘);var d = 1000, t = Date.now();while(Date.now() - t < d) { client.send();}console.log(‘end.‘);
運行server.js
> node server.js
運行atack.js發起請求,(經測試每秒能發出約50000個請求):
> node atack.js
結果:
Accept 5request.Accept 5request.Accept 5request.Accept 5request.Accept 5request.Accept 10request.Accept 10request.Accept 10request.Accept 10request.Accept 10request.Accept 15request.Accept 15request.Accept 15request.Accept 15request.Accept 15request.// 省略後面N條
通過結果可以知道server.js在5秒內只接受了5個請求,這是為什麼呢?
Node.js 的 socket 模組的一個限制導致的,好像是同一 IP 不能串連超過 5 個 socket。
試試 require(‘http‘).globalAgent.maxSockets = Infinity
關於nodejs能同時接受多少個請求的問題?////zzz