var http = require('http');
var url = require('url');
var dns = require('dns');
var qs = require('querystring');
dns.setServers(['223.5.5.5']);
var server = http.createServer(function (req, res) {
var uri = url.parse(req.url);
var h = qs.parse(uri.query).host;
if (!h) {
res.end();
return;
}
if (uri.pathname === '/dnsQuery') {
//console.log(h);
dns.lookup(h, { family: 4, all: true }, function (err, addrs) {
if (err) {
console.error(h + ":" + err);
res.end();
}
else {
var result=addrs.map(r=>r.address).join(',');
console.log(h+':'+result);
res.setHeader('Cache-Control', 'public, max-age=3600');
res.end(result);
}
});
}
});
server.listen(8080);
很简单的一段代码,一开始还好,在并发量(也不多估计才几十到一百每秒)上来以后就查询的非常慢,前面挂的 nginx 60 秒后就 504 了,而且当我查询已经查询过的域名的时候也是 504 ,好像 nginx 的缓存没有生效一样,用 pm2 list 确认了 app 还在运行,并且 pm2 logs 里也有查询的记录
1
zbinlin 2016-12-07 15:53:09 +08:00
你可以看下官方文档里关于 dns.lookup 的说明:
https://nodejs.org/dist/latest-v6.x/docs/api/dns.html#dns_dns_lookup |
2
jacobbubu 2016-12-07 16:10:51 +08:00
dns.lookup 和 nginx 无关。 node.js 的 dns.lookup 实现是无缓存的,如果需要缓存自己来做。
|
3
mcree 2016-12-10 00:17:50 +08:00
不一定是这个原因,不过上游 DNS 服务器可能有 rate-limit 。
|
4
yunshansimon 2016-12-10 09:15:22 +08:00
使用 dns.resolve()代替 lookup()再试试
|