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()再试试 |