1

ユーザーを循環させて、リモートサーバーで各ユーザーのリクエストを実行しようとしています。多くのリクエストはECONNREFUSEDエラーで失敗します。リクエストを設定globalAgent.maxSocketsしてずらしてみましたが、問題は解決しません。これはリモートサーバーからの応答ですか、それともノードアプリのエラーですか?どうすればこれを解決できますか?

ソース:

var https = require("https");       
https.globalAgent.maxSockets = 1024;

var get = function(username, password, cb, failed) {
    var post_data = 'username='+user+'&password='+password;

    var post_req = https.request({
        host:__HOST__, 
        port:443, 
        path:'/Controls/CredentialsUI.ashx', 
        method: "POST",
        agent:false,
        headers: {
            'Content-Type': 'application/x-www-form-urlencoded',
            'Content-Length': post_data.length
        }
    }), function(r) {
        // get cookie if received 
        if( r.headers["set-cookie"] ) 
            cb(r.headers["set-cookie"][0].split(";")[0].split("=")[1])
        else failed();
    });

    post_req.on('error', function(error) {
        // Error handling here
        console.log(error, "for "+username);
        });

    post_req.write(post_data);
    post_req.end();
};

var success = function(){ /*...*/ };
var failure = function(){ /*...*/ };

var users = [/* array about 300 in size */];
users.map(function(user) {
    get(user.name, user.password, success, failure);
});
4

1 に答える 1

0

同じサーバーに接続している場合は、実際にはソケット プール (globalAgent.maxSockets) を下げる方が適切です。デフォルトの 5 の値で十分ですが、もちろん負荷とリモート サーバーからの応答時間によって異なります。したがって、node.js クライアントは、新しい接続を作成する代わりに、キープアライブ接続を再利用します。これにより、リモート サーバーがそれ以上の接続の受け入れを拒否する問題も解決される場合があります。

于 2012-07-23T08:06:19.523 に答える