Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js nodejs,对并发连接的控制_Node.js_Asynchronous_Concurrency - Fatal编程技术网

Node.js nodejs,对并发连接的控制

Node.js nodejs,对并发连接的控制,node.js,asynchronous,concurrency,Node.js,Asynchronous,Concurrency,我使用nodejs async模块进行并发连接,现在我的后端服务器一次只能处理1000个连接,我使用async.mapLimit来限制连接,async.mapLimit的每个作业都有多个连接,当我同时从多个浏览器发送执行async.mapLimit的相同请求时,然后我从服务器端得到EMFILE错误 ([Error: connect EMFILE] code: 'EMFILE', errno: 'EMFILE', syscall: 'connect'), 我的代码有点像这样: async.ma

我使用nodejs async模块进行并发连接,现在我的后端服务器一次只能处理1000个连接,我使用async.mapLimit来限制连接,async.mapLimit的每个作业都有多个连接,当我同时从多个浏览器发送执行async.mapLimit的相同请求时,然后我从服务器端得到EMFILE错误

([Error: connect EMFILE] code: 'EMFILE', errno: 'EMFILE', syscall: 'connect'), 
我的代码有点像这样:

async.mapLimit(jobList, 200, jobCallback, function(error, data) {
});

function jobCallback(job, callback) {
    /* Make multiple connections to to backend server, this number is 
       dynamic, here also I use async.mapLimit */
}
现在,我想在这个mapLimit或任何东西之上实现一些包装器函数,不管并行请求的数量如何,我想限制并发连接,甚至不管客户端调用的数量,它可能会更慢,但我不想麻烦

我怎样才能做到这一点

我正在使用restler库。我已经试着设置

proto.globalAgent.maxSockets = 1000
一次执行1000个并发连接,但似乎不起作用。 请告知


-M-

您必须自己控制节流,因为该异步指令不知道是否有来自其他用户的呼叫增加到1000个限制

在REST服务中,当触发此类限制时,服务通常会发送http 429响应,从而允许您的应用程序识别瓶颈场景并触发节流机制

一种常见的方法是通过指数退避

我使用以下代码行全局管理限额:

require('events').EventEmitter.prototype._maxListeners = 1000;
谢谢