简体   繁体   中英

nodejs, control over concurrent connections

I am using nodejs async module for concurrent connectios, Now my backend server only can handle 1000 connections at a time, I am using async.mapLimit to limit the connections, each and every job of async.mapLimit does multiple connections, when I am sending the same request which does async.mapLimit from multiple browser at the same time, then I am getting EMFILE error from Server side

([Error: connect EMFILE] code: 'EMFILE', errno: 'EMFILE', syscall: 'connect'), 

My code somewhat looks like this:

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 */
}

Now I want to implement some wrapper function top of this mapLimit or anything, irrespective of number of parallel requests, I want to limit the concurrent connections, even irrespective of number of client calls also, it may be slower, but I do not bother.

How I can achieve this?

I am using restler library. I have tried to set

proto.globalAgent.maxSockets = 1000

to do concurrent 1000 connections at a time, but it seems it is not working. Please advise.

-M-

You will have to control for throttling yourself, as that async instruction won't know if you have calls from other users adding to the 1000 limit.

In REST services, a service would typically send an http 429 response when such a limit is triggered, allowing your app to identify a bottleneck scenario and trigger a throttling mechanism.

A common way to do that is via exponential backoff https://developers.google.com/api-client-library/java/google-http-java-client/backoff

I use the following line of code to manage the limit globally:

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

Thanks

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM