在我的服务器上,每次用户使用我们的服务时,我们都必须从服务器获取它们的JSON文件.我通过使用fs.createReadStream()我自己的函数来做到这一点.
function getJSONFromServer(filepath, callback){
var data = fs.createReadStream(filepath);
data.on('error', function (error) {
console.log("Caught", error);
callback(undefined, error);
});
var jsonFile = "";
data.on('data', function(chunk) {
jsonFile += chunk;
});
data.on('end', function() {
var jsonData = JSON.parse(jsonFile);
callback(jsonData);
data.destroy();
data.close();
});
}
Run Code Online (Sandbox Code Playgroud)
这样做,但它不会关闭与文件的连接.因此,在读取1024个文件(我的服务器上的限制)后,Node.js将产生错误EMFILE, too many open files.然后我必须杀死我们的Node.js服务器,再次打开它,这将清除"打开文件".
我检查打开的文件数量lsof -i -n -P | grep nodejs.它显示如下:
nodejs 13707 node 10u IPv4 1163695 0t0 TCP 127.0.0.1:55643->127.0.0.1:27017 (ESTABLISHED)
nodejs 13707 node 11u IPv4 1163697 0t0 TCP 127.0.0.1:55644->127.0.0.1:27017 (ESTABLISHED)
Run Code Online (Sandbox Code Playgroud)
对于任何打开的文件.
我尝试过使用graceful-fs.我试着打电话 …