欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Nodejs下DNS緩存問題淺析

 更新時間:2016年11月16日 17:17:19   投稿:mrr  
本文給大家一起探討nodejs下dns的緩存問題,本文給大家介紹的非常詳細(xì),感興趣的朋友一起看看吧

無意間看到一個文章,是關(guān)于nodejs下發(fā)送http請求不會緩存dns結(jié)果的。這意味著,如果你基于nodejs寫了一個http采集程序,不提供dns緩存則會讓每次請求都傻傻的重復(fù)解析域名為ip地址。聽起來會非常影響性能不是么?

我的項目中,發(fā)送http請求并不是使用的node原生的http庫,而是依賴一個常用的Request庫。我查閱了一下該庫的相關(guān)文檔和github issue,也發(fā)現(xiàn)了一些和dns相關(guān)的帖子。不過多數(shù)說的是,關(guān)于dns問題,本身并不是Request庫的范疇,而歸結(jié)于nodejs的內(nèi)核問題。omg,感覺好深奧啊!

幸好,上面提到的那篇文章中也提出了兩個解決方案:

應(yīng)用級別:dnscache

操作系統(tǒng)級別:Bind, dnsmasq 和 unbound

不論是哪個方案,看起來似乎都很簡單,只是安裝并初始化即可。但問題是,我們怎么來驗證它們真實有效?由于我本地的開發(fā)機(jī)操作系統(tǒng)環(huán)境是win7 64bit,所以上文提到的操作系統(tǒng)級別的方案我無法測試。那我們就來看一下應(yīng)用級別方案到底是否有效吧~~

首先,我們需要讓win能追蹤dns請求,這里我找到了一個軟件,下載后不需要安裝直接運(yùn)行即可。然后,我們還需要一個清除緩存的方法,可以看這里,簡單說就是在終端中執(zhí)行:

ipconfig /flushdns

工具就準(zhǔn)備完畢了,我們創(chuàng)建一個測試腳本:

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

好的,現(xiàn)在打開DNSQuerySniffer,然后先清理一下本地DNS緩存,一切就緒后執(zhí)行我們的測試腳本node test.js。你會在DNSQuerySniffer中看到一次DNS請求及其相關(guān)信息。在一定的時間間隔內(nèi),反復(fù)運(yùn)行我們的測試腳本你會發(fā)現(xiàn)并不會再次觸發(fā)DNS請求,這說明什么?我的win7環(huán)境本身就自帶操作系統(tǒng)級別的DNS緩存(只是緩存時間很短)。

修改我們的測試腳本如下:

const dnscache = require('dnscache')({
"enable": true
});
const Request = require('request');
function fetch(url, callback){
Request.head({
url: url,
timeout: 10000,
tunnel: true,
gzip: true,
proxy: false,
followRedirect: false
}, callback);
}
let now = 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);
});

這次我們在執(zhí)行測試腳本后,快速清空本地DNS緩存(如果你手速不快,可以適當(dāng)延長setTimeout的觸發(fā)間隔),你會發(fā)現(xiàn),兩秒后的http請求并沒有重新查詢DNS,這說明什么?很明顯,我們的應(yīng)用自己維護(hù)了DNS緩存,所以第二次請求根本就不會關(guān)心操作系統(tǒng)本地是否存在對應(yīng)的DNS緩存記錄。

以上所述是小編給大家介紹的Nodejs下DNS緩存問題,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!

相關(guān)文章

  • Nodejs實現(xiàn)獲取實時數(shù)據(jù)的三種主流方式詳解

    Nodejs實現(xiàn)獲取實時數(shù)據(jù)的三種主流方式詳解

    這篇文章主要為大家詳細(xì)介紹了Nodejs前端獲取實時數(shù)據(jù)的三種主流方式,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-02-02
  • NodeJS使用遞歸算法和遍歷算法來遍歷目錄的方法

    NodeJS使用遞歸算法和遍歷算法來遍歷目錄的方法

    遍歷目錄是操作文件時的一個常見需求,比如寫一個程序,需要找到并處理指定目錄下的所有JS文件時,就需要遍歷整個目錄,NodeJS遍歷目錄可以使用遞歸算法、遍歷算法,遍歷算法又分為同步遍歷、異步遍歷兩種,本文介紹NodeJS使用遞歸算法和遍歷算法來遍歷目錄的方法
    2023-11-11
  • 關(guān)于Node.js中頻繁修改代碼重啟服務(wù)器的問題

    關(guān)于Node.js中頻繁修改代碼重啟服務(wù)器的問題

    這篇文章主要介紹了關(guān)于Node.js中頻繁修改代碼重啟服務(wù)器的問題,本文給大家分享解決辦法,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-10-10
  • node創(chuàng)建Vue項目步驟詳解

    node創(chuàng)建Vue項目步驟詳解

    在本篇文章里小編給大家整理的是關(guān)于node創(chuàng)建Vue項目步驟詳解內(nèi)容,需要的朋友們可以學(xué)習(xí)下。
    2020-03-03
  • 使用Raygun對Node.js應(yīng)用進(jìn)行錯誤處理的方法

    使用Raygun對Node.js應(yīng)用進(jìn)行錯誤處理的方法

    這篇文章主要介紹了使用Raygun對Node.js應(yīng)用進(jìn)行錯誤處理的方法,Node.js是一款用于服務(wù)器端的JavaScript框架,需要的朋友可以參考下
    2015-06-06
  • Node.js 在本地生成日志文件的方法

    Node.js 在本地生成日志文件的方法

    這篇文章主要介紹了Node.js 在本地生成日志文件的方法,本文通過實例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-02-02
  • nodeJs事件循環(huán)運(yùn)行代碼解析

    nodeJs事件循環(huán)運(yùn)行代碼解析

    這篇文章主要為大家介紹了nodeJs事件循環(huán)運(yùn)行代碼解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-04-04
  • 關(guān)于npm?i幾種常見命令的區(qū)別詳解

    關(guān)于npm?i幾種常見命令的區(qū)別詳解

    npm(Node.js Package Manager)是一個Node.js的包管理工具,用來解決Node.js代碼部署問題,下面這篇文章主要給大家介紹了關(guān)于npm?i幾種常見命令的那點(diǎn)事,需要的朋友可以參考下
    2023-03-03
  • pm2與Verdaccio搭建私有npm庫過程詳解

    pm2與Verdaccio搭建私有npm庫過程詳解

    這篇文章主要介紹了pm2與Verdaccio搭建私有npm庫過程詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-08-08
  • node.js如何操作MySQL數(shù)據(jù)庫

    node.js如何操作MySQL數(shù)據(jù)庫

    這篇文章主要介紹了node.js如何操作MySQL數(shù)據(jù)庫,幫助大家更好的進(jìn)行web開發(fā),感興趣的朋友可以了解下
    2020-10-10

最新評論