1

我正在使用 node.js 构建数据传输代理服务器。它使用 http(s) REST API 将客户端的请求通过管道传输到 swift 对象存储服务器。

它适用于单个请求,但是当同一目的地和端口(443)的传出 ESTABLISHED tcp 连接达到五个时,它无法创建任何新连接。

这似乎不是 O/S 的问题,因为我尝试使用 java servlet 创建超过 10 个连接并且它工作正常。

我试图为 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将带有值的键添加false到请求的选项中。请记住,Node.js 使用池来使用保持活动连接。

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