关于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的更多相关文章

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

    请求数据 前台:form.ajax.jsonp 后台:接受请求并返回响应数据     前台<= http协议 =>后台   常用的请求的方式: 1.GET           数据在url ...

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

    最近要用到一个叫融云的及时通讯的SDK,在获取token这个步骤的时候有点卡顿,以防以后碰到类似的问题,再此记录一下. 客户端通过融云 SDK 每次连接服务器时,都需要向服务器提供 Token,以便验 ...

  3. NodeJS系列~第四个小例子,NodeJs处理Get请求和Post请求

    返回目录 说在前 对于HTTP请求来说,我们通常使用的是Get和Post,除此之外还有put,delete等,而对于get来说,比较lightweight,只是对字符串的传输,它会被添加到URL地址里 ...

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

    有可能有这样的需求,需要node作为web服务器通过另外一台http/https代理服务器发http或者https请求,废话不多说直接上代码大家都懂的: var http = require('htt ...

  5. nodejs(上)(获取请求参数)

    Node.js是一个让JavaScript运行在服务器端的开发平台    参考文章 nodejs特点: 单线程 异步非阻塞i/o(异步相对节省资源,把那个等待的时间利用上了) 事件驱动 稳定性差(因为 ...

  6. 【C#】WebService接受跨域请求及返回json数据

    问题概述 通过Web Service发布服务供客户端调用是一种非常简单.方便.快速的手段,并且服务发布后会有一个服务说明页面,直观明了,如图: 一般情况下,在web页面中的JavaScript中调用W ...

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

      大致意思是 虽然NSOperation 的cancel 并不能取消请求,但是可以对这个NSOperation进行标记. 当cancel 属性是YES时,表明 NSOperation虽然已经执行,并 ...

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

    最近在使用Jmeter进行接口测试,被一个问题困扰了很久,就是第二个请求如何接收上一个请求响应中的参数,刚开始尝试着用网上普遍说的正则表达式,长了了N多次之,都没有达到我想要的效果,被整的够惨,于是, ...

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

    初始实现 var net = require('net');//1 引入net模块 var chatServer = net.createServer();//创建net服务器 var clientL ...

随机推荐

  1. jQuery学习笔记--JqGrid相关操作 方法列表(上)

    1.获得当前列表行数:$("#gridid").getGridParam("reccount"); 2.获取选中行数据(json):$("#gridi ...

  2. 关于javaScript单线程的见解

    众所周知JavaScript是一门单线程的语言,这就意味着在同一时间他只能做一件事: 但是html5中提出了web worker的标准--->允许js创建多个线程, 这是否将改变js的单线程机制 ...

  3. android——判断网络状态

    平常我们玩qq的时候我们没联网 ,qq上面回显示"网络连接不给力,请检查网络连接"那么它是 通过什么方式判断网络是否连接的呢? 下面将写个案例展示如何检查网络连接状态的 由于我们这 ...

  4. requirejs:研究笔记

    模块化历史 模块化异步加载方式 后期维护 查找问题 复用代码 防止全局变量的污染 http://requirejs.cn/ http://requirejs.org/ 我的目录结构 总体步骤 < ...

  5. DS实验题 融合软泥怪-1

    题目 思路 很容易想到第一种做法,用Huffman算法,从森林中找出两个值最小的节点,合并再加入森林,在这个过程中不断记录. 但是每一次需要sort一遍,将最小的两个值节点置于头两个节点,最坏情况下复 ...

  6. Sublime P4语法高亮设置

    Github插件链接:p4-syntax-highlighter 首先安装Package Control. 进入Package界面,我的目录: /Users/wasdns/Library/Applic ...

  7. GAME AI Pro 1 第1章

    和钱康来合作翻译的AI PRO 1和2 系列,计划是一周一篇,先捡着有意思的翻,对那篇有兴趣也可以留言给我优先翻译,希望都翻译好后有机会成书吧,有兴趣一起翻译的也可以联系我. 游戏人工智能是什么( W ...

  8. SDK Manager.exe闪退

    运行tools文件下android.bat. 修改tools文件下android.bat文件,再运行SDK Manager.exe

  9. C#中文件多选 批量下载

    public class MyNameTransfom : ICSharpCode.SharpZipLib.Core.INameTransform { #region INameTransform 成 ...

  10. require.js工作原理(初始)

    详情:请见阮一峰老师的日志:http://www.ruanyifeng.com/blog/2012/11/require_js.html: 导入:<script data-main=" ...