我正在使用nodejs异步模块进行并发连接,现在我的后端服务器一次只能处理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 -
答案 0 :(得分:0)
你必须自己控制限制,因为async指令不知道你是否有来自其他用户的电话增加到1000限制。
在REST服务中,服务通常会在触发此限制时发送http 429响应,从而允许您的应用识别瓶颈情况并触发限制机制。
通常的方法是通过指数退避 https://developers.google.com/api-client-library/java/google-http-java-client/backoff
答案 1 :(得分:0)
我使用以下代码行来全局管理限制:
require('events').EventEmitter.prototype._maxListeners = 1000;
由于