1

node.js を使用してデータ転送プロキシ サーバーを構築しています。http(s) REST API を使用して、クライアントのリクエストを迅速なオブジェクト ストレージ サーバーにパイプします。

個々の要求に対しては正常に機能しますが、同じ宛先とポート (443) の発信 ESTABLISHED tcp 接続が 5 に達すると、新しい接続を作成できません。

Java サーブレットを使用して 10 以上の接続を作成しようとしたところ、正常に動作したため、O/S の問題ではないようです。

以下のようにglobalAgentの最大ソケットを設定しようとしましたが、何も変わりません。

http.globalAgent.maxSockets = 500;
https.globalAgent.maxSockets = 500;

これが私のソースコードの一部です。

app.post('/download*', function(req, res){

    /***********************************************************
     * Some codes here to create new request option
     ***********************************************************/

    var client = https.request(reqOptions, function(swiftRes) {
        var buffers = [];
        res.header('Content-Length', swiftRes.headers['content-length']);
        res.header('Content-Type', swiftRes.headers['content-type']);
        res.header('range', swiftRes.headers['range']);
        res.header('connection', swiftRes.headers['connection']);

        swiftRes.pipe(res);

        swiftRes.on('end', function(err){
            res.end();
        });
    });

    client.on('error', function(err) {
        callback && callback(err);
        client.end(err);
        clog.error('######### Swift Client Error event occurred. Process EXIT ');
    });

    client.end();   
});

この問題の解決策が得られることを願っています。

前もって感謝します。

4

1 に答える 1

3

通常、 を変更maxSocketsすると問題が解決するはずです。少し低い値で試してみてください。

https.globalAgent.maxSockets=20;

それでも問題が解決しない場合は、接続のプーリングをオフにしてみてください。オプションagentの値を持つキーをリクエストに追加します。falseNode.js はプーリングを使用してキープアライブ接続を使用することに注意してください。

//Your option code
reqOptions.agent=false;
于 2013-05-31T07:20:58.993 に答える