【发布时间】:2015-09-03 01:02:03
【问题描述】:
我正在实现基于 NodeJS 的脚本,用于与 couchbase 和其他服务进行通信。这是一个长时间运行的脚本,过了一会儿我得到了服务的“连接 EMFILE”。我的代码示例如下:
function createContainer(chunkName,recordingID,chunkData)
{
var swiftHTTPPath='http://'+swiftIPAddr+'/swift/v1/'+recordingID;
var path = '/swift/v1/'+recordingID;
var swiftOptions = {
hostname : swiftIPAddr,
port : swiftPort,
path : path,
method : 'PUT',
};
http.get(swiftHTTPPath, function(res) {
if(res.statusCode == '404')
{
var req = http.request(swiftOptions, function(res)
{
res.setEncoding('utf8');
res.on('data', function (chunk)
{
console.log('Container created');
});
res.on('end', function() {
});
});
req.on('error', function(e)
{
console.log(e.message);
});
req.end();
}
else
{
console.log('Container already exists');
}
}).on('error', function(e)
{
console.log('e.message);
});
}
以下命令显示有超过 1024 个打开的连接
lsof -i -n -P > mylog.log
........
node 14135 ubuntu 1020u IPv4 5249347 0t0 TCP 10.1.1.1:53623->10.1.1.2:8091 (ESTABLISHED)
node 14135 ubuntu 1021u IPv4 5249350 0t0 TCP 10.1.1.1:42021->10.1.1.2:11210 (ESTABLISHED)
node 14135 ubuntu 1022u IPv4 5249351 0t0 TCP 10.1.1.1:53627->10.1.1.2:8091 (ESTABLISHED)
........
我可以增加 ulimit 值,但我想知道我是否以正确的方式执行 HTTP GET、POST 请求。有没有办法重用/终止连接?
【问题讨论】: