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

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

时间: 2024-10-12 16:43:41

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

nodejs学习笔记二(get请求、post请求、 querystring模块,url模块)

请求数据 前台:form.ajax.jsonp 后台:接受请求并返回响应数据 前台<= http协议 =>后台 常用的请求的方式: 1.GET           数据在url中 2.POST         数据不再url中 get方式:通过地址栏来传输     name=value&name1=value1&               作用:分享 post方式:通过head头传输      数据相对安全 form action="http://www.vaidu

nodejs向远程服务器发送post请求----融云Web SDK/客户端获取token

最近要用到一个叫融云的及时通讯的SDK,在获取token这个步骤的时候有点卡顿,以防以后碰到类似的问题,再此记录一下. 客户端通过融云 SDK 每次连接服务器时,都需要向服务器提供 Token,以便验证身份,流程如下: 流程如下: 1.客户端获取用户id,并向服务器请求token(注意这里的服务器不是融云的服务器,而是客户端的服务端) 2.客户端的服务端接收到token请求后,向融云的服务器请求token 3.融云服务器接受到token请求,返回token给客户端的服务端. 4.客户端的服务端接

nodejs通过代理(proxy)发送http请求(request)

var http = require('http') var opt = { host:'这里放代理服务器的ip或者域名', port:'这里放代理服务器的端口号', method:'POST',//这里是发送的方法 path:' https://www.google.com', //这里是访问的路径 headers:{ //这里放期望发送出去的请求头 } } //以下是接受数据的代码 var body = ''; var req = http.request(opt, function(res

Jmeter之Json Path Extractor 接受上一个请求的响应参数

最近在使用Jmeter进行接口测试,被一个问题困扰了很久,就是第二个请求如何接收上一个请求响应中的参数,刚开始尝试着用网上普遍说的正则表达式,长了了N多次之,都没有达到我想要的效果,被整的够惨,于是,开始尝试使用第二种方法,就是Jmeter之Json Path Extractor,感觉棒极了,在此记录下 1.下载安装 Json Path Extractor插件,然后解压到jmeter安装目录相应的文件夹下(这里不细讲了) 2.添加请求A,输入响应的服务器.端口号.路径等(路径要记得输对哦),在A

iOS 如何解决并发请求时,只接受最后一个请求返回的结果

大致意思是 虽然NSOperation 的cancel 并不能取消请求,但是可以对这个NSOperation进行标记. 当cancel 属性是YES时,表明 NSOperation虽然已经执行,并返回了结果,但是我现在不需要了.那么我们每次执行request的时候都把上一个operation cancel掉,然后在completion  Block中判断operation是否cancel,如果cancel那么不返回response的值. 1 + (AFHTTPRequestOperation *

nodejs 使用代理发送http/https请求

http的比较简单: var Http = require('http'); var req = Http.request( { host: '192.168.5.8', // 代理 IP port: 3128, // 代理端口 method: 'GET', path: 'http://baidu.com' // 要访问的url }, function(res) { res.on('data', function(data) { console.log(data.toString()); });

关于如何接受异步ajax请求返回前台的数据

1.第一种方式通过bean,后台需封装成json数据格式,前台paseJSON(); public void checkCode() { ResponseMessage rm = new ResponseMessage(true,null); String hql = "from TblWrPeople t where t.wrPeopleCode='"+code+"' and t.delFlag='"+Constants.DELFLAGA+"'"

nodejs 服务器实现区分多客户端请求服务

初始实现 var net = require('net');//1 引入net模块 var chatServer = net.createServer();//创建net服务器 var clientList=[];//保存多个客户端的数组 chatServer.on('connection', function (client) {//服务器连接客户端 client.name=client.remoteAddress+':'+client.remotePort; /*增加name属性*/ cli

Nodejs发送Post请求时出现socket hang up错误的解决办法

参考nodejs官网发送http post请求的方法,实现了一个模拟post提交的功能.实际使用时报socket hang up错误. 后来发现是请求头设置的问题,发送选项中需要加上headers字段信息(这个估计也和对方的服务器有关,对于不完成的post请求头,可能被丢弃了). 完整的代码如下(遇到类型问题的同学可以做个参考): var querystring = require('querystring') , http = require('http'); var data = query