我正在使用node.js构建数据传输代理服务器。 它使用http(s)REST API将客户端的请求传递给swift对象存储服务器。
它适用于个人请求,但在传出时 建立同一目的地和端口的tcp连接(443) 达到五,它不能创建任何新的连接。
它似乎不是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();
});
我希望我能解决这个问题。
提前致谢。
答案 0 :(得分:3)
通常,maxSockets
的更改应该可以解决您的问题,尝试使用稍低一点的值。
https.globalAgent.maxSockets=20;
如果这不能解决您的问题,请尝试关闭连接的池。将值agent
添加值false
到请求的选项。请记住,Node.js使用池来使用保持连接。
//Your option code
reqOptions.agent=false;