【发布时间】:2011-07-11 11:00:39
【问题描述】:
我是 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
});
异常未在“错误”侦听器中捕获。我试图将以上内容包装在try{} catch (e) {} 中,但没有任何反应。我在createConnection中使用了回调方法,它不会返回任何错误。
我能够捕捉到异常的唯一方法是:
process.on('uncaughtException', function(err) {
console.log(err);
});
这似乎不安全,因为它可以捕捉所有东西。
所以我的第二个问题是:捕捉错误并重试调用的“最佳实践”方法是什么?
我看过: https://github.com/isaacs/npm/blob/master/lib/utils/graceful-fs.js 和 Simple nodejs http proxy fails with "too many open files" 作为参考,但我不确定如何将 npm 中的 graceful 方法应用于 createConnection 调用。
非常感谢!
【问题讨论】:
标签: asynchronous node.js