码迷,mamicode.com
首页 > Web开发 > 详细

关于nodejs能同时接受多少个请求的问题?////zzz

时间:2016-10-07 01:46:08      阅读:247      评论:0      收藏:0      [点我收藏+]

标签:

关于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

标签:

原文地址:http://www.cnblogs.com/zouzou-blog/p/5935160.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!