Sal*_*mon 11 javascript dns node.js
我是Node.js的新手,我在使用node.dns.resolveNs函数时遇到了问题.
有些域完全关闭,获得响应大约需要一分钟,通常是"queryNs ETIMEOUT".有没有办法让我把它设置得更短,例如10秒?
Mic*_*ley 20
我不确定是否有任何方法可以直接在函数调用上设置超时,但您可以在调用周围创建一个小包装器以自行处理超时:
var dns = require('dns');
var nsLookup = function(domain, timeout, callback) {
var callbackCalled = false;
var doCallback = function(err, domains) {
if (callbackCalled) return;
callbackCalled = true;
callback(err, domains);
};
setTimeout(function() {
doCallback(new Error("Timeout exceeded"), null);
}, timeout);
dns.resolveNs(domain, doCallback);
};
nsLookup('stackoverflow.com', 1000, function(err, addresses) {
console.log("Results for stackoverflow.com, timeout 1000:");
if (err) {
console.log("Err: " + err);
return;
}
console.log(addresses);
});
nsLookup('stackoverflow.com', 1, function(err, addresses) {
console.log("Results for stackoverflow.com, timeout 1:");
if (err) {
console.log("Err: " + err);
return;
}
console.log(addresses);
});
Run Code Online (Sandbox Code Playgroud)
上述脚本的输出:
Results for stackoverflow.com, timeout 1:
Err: Error: Timeout exceeded
Results for stackoverflow.com, timeout 1000:
[ 'ns1.serverfault.com',
'ns2.serverfault.com',
'ns3.serverfault.com' ]
Run Code Online (Sandbox Code Playgroud)
小智 7
Node.js dns.resolve*在下面使用c-ares库,该库本身支持超时和其他各种选项。不幸的是,Node.js没有公开那些可调参数,但是其中一些可以通过RES_OPTIONS环境变量设置。
例: RES_OPTIONS='ndots:3 retrans:1000 retry:3 rotate' node server.js
ndots:与ARES_OPT_NDOTS相同retrans:与ARES_OPT_TIMEOUTMS相同retry:与ARES_OPT_TRIES相同rotate:与ARES_OPT_ROTATE相同有关每个选项含义的详细信息,请参见man ares_init_options(3),例如,此处http://manpages.ubuntu.com/manpages/zesty/man3/ares_init_options.3.html
| 归档时间: |
|
| 查看次数: |
5636 次 |
| 最近记录: |