我是Node.JS的新手,我遇到了EMFILE错误.我正在寻找一种捕获EMFILE异常的方法,并在代码中处理它.
似乎有很多关于"错误:EMFILE,太多打开文件"错误的问题,但大多数答案似乎都是"增加你的ulimit".
我的第一个问题是,如何捕获此异常?当我使用许多连接运行以下代码时,它会引发EMFILE错误:
stream = net.createConnection(port, host);
stream.addListener('connect', function() {
return stream.write(request);
});
stream.addListener('data', function(data) {
return console.log(data);
});
stream.addListener('end', function() {
stream.end();
return callback();
});
stream.addListener('timeout', function() {
stream.destroy();
console.log("timeout");
return callback();
});
stream.addListener('error', function(e) {
console.log("this never gets called");
return
});
Run Code Online (Sandbox Code Playgroud)
异常没有被'错误'监听器捕获.我试图将上面的内容包装成一个try{} catch (e) {}没有任何反应.我已经为createConnection使用了一个回调方法,它不会返回任何错误.
我能够捕获异常的唯一方法是:
process.on('uncaughtException', function(err) {
console.log(err);
});
Run Code Online (Sandbox Code Playgroud)
这似乎是不安全的,因为它抓住了一切.
所以我的第二个问题是:捕获错误并重试呼叫的"最佳实践"方法是什么?
我看过:https: //github.com/isaacs/npm/blob/master/lib/utils/graceful-fs.js 和 简单nodejs http代理失败,"太多打开的文件" 作为参考,但我'我不知道如何将npm 的graceful方法应用于createConnection调用.
非常感谢!