当前位置:首页 > 电脑常识 > 正文

nodejs下DNS缓请安题 8090安适门户

11-20 电脑常识

无意间看到一个 文章 ,是关于nodejs下发送http请求不会缓存dns功效的。这意味着,如果你基于nodejs写了一个http收罗措施,不供给dns缓存则会让每次请求都傻傻的反复解析域名为ip地点。听起来会非常影响性能不是么?

我的项目中,发送http请求并不是使用的node原生的http库,而是依赖一个常用的 Request 库。我查阅了一下该库的相关文档和github issue,也发明了一些和dns相关的帖子。不过大都说的是,关于dns问题,自己并不是 Request 库的领域,而归结于nodejs的内核问题。omg,觉得好深奥啊!

幸好,上面提到的那篇文章中也提出了两个解决方案:

应用级别: dnscache

操纵系统级别: Bind , dnsmasq 和 unbound

岂论是哪个方案,看起来似乎都很简单,只是安置并初始化即可。但问题是,我们怎么来验证它们真实有效?由于我本地的开发机操纵系统环境是win7 64bit,所以上文提到的操纵系统级另外方案我无法测试。那我们就来看一下应用级别方案到底是否有效吧~~

首先,我们需要让win能追踪dns请求,这里我找到了一个 软件 ,下载后不需要安置直接运行即可。然后,我们还需要一个断根缓存的要领,可以看 这里 ,简单说就是在终端中执行:

ipconfig /flushdns

工具就筹备完毕了,我们创建一个测试脚本:

constRequest =require('request'); functionfetch(url, callback){ Request.head({ url: url, timeout:10000, tunnel:true, gzip:true, proxy:false, followRedirect:false }, callback); } letnow =Date.now(); fetch('http://blog.kazaff.me',function(err, response, body){ console.log('lookup time without cache: ',Date.now() - now); });

好的,此刻打开 DNSQuerySniffer ,然后先清理一下本地DNS缓存,一切就绪后执行我们的测试脚本 node test.js 。你会在 DNSQuerySniffer 中看到一次DNS请求及其相关信息。在必然的时间间隔内,重复运行我们的测试脚本你会发明并不会再次触发DNS请求,这说明什么? 我的win7环境自己就自带操纵系统级另外DNS缓存 (只是缓存时间很短)。

改削我们的测试脚本如下:

constdnscache =require('dnscache')({ "enable":true }); constRequest =require('request'); functionfetch(url, callback){ Request.head({ url: url, timeout:10000, tunnel:true, gzip:true, proxy:false, followRedirect:false }, callback); } letnow =Date.now(); fetch('http://priceline.com',function(err, response, body){ console.log('lookup time without cache: ',Date.now() - now); setTimeout(function(){ now = Date.now(); fetch('http://priceline.com',function(err, response, body){ console.log('lookup time with cache: ',Date.now() - now); }); }, 2000); });

此次我们在执行测试脚本后,快速清空本地DNS缓存(如果你手速烦闷,可以适当耽误setTimeout的触发间隔),你会发明,两秒后的http请求并没有从头盘问DNS,这说明什么?很明显, 我们的应用本身维护了DNS缓存 ,所以第二次请求根柢就不会关心操纵系统本地是否存在对应的DNS缓存记录。

SO,我们如果不想让本身的措施依赖操纵系统环境,那此刻就可以本身来维护DNS解析记录了,哇啦~

温馨提示: 本文由杰米博客推荐,转载请保留链接: https://www.jmwww.net/file/pc/12636.html

博客主人杰米WWW
杰米博客,为大家提供seo以及it方面技巧喜欢的朋友收藏哦!
  • 11365文章总数
  • 1378073访问次数
  • 建站天数
  •