最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Nodejs下DNS緩存問題淺析

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

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

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

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

應(yīng)用級(jí)別:dnscache

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

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

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

ipconfig /flushdns

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

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。你會(huì)在DNSQuerySniffer中看到一次DNS請求及其相關(guān)信息。在一定的時(shí)間間隔內(nèi),反復(fù)運(yùn)行我們的測試腳本你會(huì)發(fā)現(xiàn)并不會(huì)再次觸發(fā)DNS請求,這說明什么?我的win7環(huán)境本身就自帶操作系統(tǒng)級(jí)別的DNS緩存(只是緩存時(shí)間很短)。

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

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ā)間隔),你會(huì)發(fā)現(xiàn),兩秒后的http請求并沒有重新查詢DNS,這說明什么?很明顯,我們的應(yīng)用自己維護(hù)了DNS緩存,所以第二次請求根本就不會(huì)關(guān)心操作系統(tǒng)本地是否存在對應(yīng)的DNS緩存記錄。

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

相關(guān)文章

  • nodejs acl的用戶權(quán)限管理詳解

    nodejs acl的用戶權(quán)限管理詳解

    這篇文章主要介紹了nodejs acl的用戶權(quán)限管理詳解,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-03-03
  • Windows下Node爬蟲神器Puppeteer安裝記

    Windows下Node爬蟲神器Puppeteer安裝記

    這篇文章主要介紹了Windows下Node爬蟲神器Puppeteer安裝記,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2019-01-01
  • NodeJS遍歷文件生產(chǎn)文件列表功能示例

    NodeJS遍歷文件生產(chǎn)文件列表功能示例

    這篇文章主要介紹了NodeJS遍歷文件生產(chǎn)文件列表功能,結(jié)合實(shí)例形式分析了nodejs針對文件與目錄的遍歷、判斷及讀寫等相關(guān)操作技巧,需要的朋友可以參考下
    2017-01-01
  • 詳解Node.js 中使用 ECDSA 簽名遇到的坑

    詳解Node.js 中使用 ECDSA 簽名遇到的坑

    這篇文章主要介紹了詳解Node.js 中使用 ECDSA 簽名遇到的坑,主要是使用 Node.js 的 Crypto 模塊無法校驗(yàn)網(wǎng)絡(luò)傳輸過來的簽名結(jié)果,感興趣的小伙伴們可以參考一下
    2018-11-11
  • nodejs搭建本地服務(wù)器輕松解決跨域問題

    nodejs搭建本地服務(wù)器輕松解決跨域問題

    這篇文章主要介紹了利用nodejs搭建本地服務(wù)器 解決跨域問題,需要的朋友可以參考下
    2018-03-03
  • 使用express搭建一個(gè)簡單的查詢服務(wù)器的方法

    使用express搭建一個(gè)簡單的查詢服務(wù)器的方法

    本篇文章主要介紹了使用express搭建一個(gè)簡單的查詢服務(wù)器的方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-02-02
  • NodeJS前端自動(dòng)化部署實(shí)現(xiàn)實(shí)例詳解

    NodeJS前端自動(dòng)化部署實(shí)現(xiàn)實(shí)例詳解

    這篇文章主要為大家介紹了NodeJS前端自動(dòng)化部署實(shí)現(xiàn)實(shí)例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-10-10
  • Node.js實(shí)現(xiàn)mysql連接池使用事務(wù)自動(dòng)回收連接的方法示例

    Node.js實(shí)現(xiàn)mysql連接池使用事務(wù)自動(dòng)回收連接的方法示例

    這篇文章主要介紹了Node.js實(shí)現(xiàn)mysql連接池使用事務(wù)自動(dòng)回收連接的方法,結(jié)合實(shí)例形式分析了node.js操作mysql連接池實(shí)現(xiàn)基于事務(wù)的連接回收操作相關(guān)技巧,需要的朋友可以參考下
    2018-02-02
  • npm?ERR!?Node.js?v20.11.0錯(cuò)誤的解決

    npm?ERR!?Node.js?v20.11.0錯(cuò)誤的解決

    在使用?npm?進(jìn)行包管理和構(gòu)建項(xiàng)目的過程中,有時(shí)會(huì)遇到錯(cuò)誤信息?npm?ERR!?Node.js?v20.11.0,本文就來介紹一下如何解決,感興趣的可以了解一下
    2024-02-02
  • Yarn的安裝與使用詳細(xì)介紹

    Yarn的安裝與使用詳細(xì)介紹

    不知道大家有沒有覺察到Facebook近年大招頻出。Yarn是Facebook最近發(fā)布的一款依賴包安裝工具。Yarn是一個(gè)新的快速安全可信賴的可以替代NPM的依賴管理工具,Yarn正式發(fā)布沒幾天已經(jīng)迅速達(dá)到了數(shù)萬贊,就可以知道大家苦NPM久已。這篇文章將詳細(xì)介紹Yarn的安裝與使用。
    2016-10-10

最新評(píng)論

田阳县| 延庆县| 永宁县| 丰都县| 江口县| 宁陵县| 安义县| 岳阳县| 甘泉县| 彝良县| 景德镇市| 上饶市| 镇江市| 文化| 都兰县| 伊宁县| 巴马| 保定市| 敖汉旗| 木兰县| 东光县| 萨嘎县| 甘洛县| 石楼县| 石阡县| 赤城县| 孝感市| 靖远县| 沾益县| 乡城县| 特克斯县| 竹北市| 响水县| 明星| 永靖县| 通化县| 当阳市| 西和县| 屯留县| 安徽省| 罗源县|