簡體   English   中英

nodejs,控制並發連接

[英]nodejs, control over concurrent connections

我正在使用nodejs異步模塊進行並發connectios,現在我的后端服務器一次只能處理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響應,從而使您的應用能夠識別瓶頸情況並觸發調節機制。

一種常用的方法是通過指數補償https://developers.google.com/api-client-library/java/google-http-java-client/backoff

我使用以下代碼行來全局管理限制:

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

謝謝

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM