ノードサーバーがホストされており、アプリケーションからhttp経由で外部apiにリクエストを送信します。この外部サービスは10request/secを処理できます。アプリケーションはNginxの後ろにあり、タイムアウトは30秒です。ここでnodejsアプリケーションサーバーに10kリクエストの負荷をかけてみましょう。我々は30秒以内に最大10 * 30要求を処理できる外部APIに依存しているので。 300リクエストのみがサービスされ、残りはNginxによって終了されます。しかし、まだこの10kのリクエストは、https.globalAgent.requestsのキューに入れられ、実行され続けます。 sockettimeoutを指定する方法や、要求キューのサイズを制限する方法はありません。アプリケーションへのさらなる呼び出しは、最終的に外部サービスのためにキューに入れられ、後でNginxによって終了されます。NodeJs:maxsocketsが10に制限されている場合、globalAgentのリクエストキューを制限する方法
質問があります: socketTimeOutを設定する方法はありますか? キューのサイズを制限する方法はありますか。 回避策はありますか?私はあなたがexcededリミットの場合https://github.com/jhurliman/node-rate-limiter
のようなレート制限のライブラリを使用することをお勧めします
var http = require('http');
var https = require('https');
var Q = require('q');
var file = require('fs');
var request = require('request');
http.globalAgent.maxSockets = 10;
https.globalAgent.maxSockets = 10;
https.globalAgent.keepAlive=true;
http.createServer(function (req, res) {
res.writeHead(200, {'Content-Type': 'text/plain'});
var st = new Date();
var rr = request(
{url:'https://amazon.com',timeout:100000,time:true},
function(err,resp,body){
var et = new Date();
// console.log(resp && resp.timings.socket,st-et,err);
console.log(https.globalAgent)
res.end('ok');
}
);
}).listen(9898);