Я реализую сценарии на основе NodeJS для связи с кушеткой и другой службой. Это длинный сценарий, и через некоторое время я получаю «подключить 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. Есть ли способ повторно использовать/разорвать соединение?