簡體   English   中英

Go緩存DNS查找?

[英]Does Go cache DNS lookups?

我正在構建一個測試爬蟲,並想知道Go(golang)是否緩存DNS查詢。 我沒有在dnsclient中看到有關緩存的任何信息。 這似乎是添加到任何爬蟲以防止大量額外DNS查詢的重要事情。

Go(1.4+)是否緩存DNS查找?

如果沒有,debian / ubuntu / linux,windows或darwin / OSX是否在網絡級別進行任何緩存從中受益?

你的問題的答案是否定的。 std lib解析器中沒有內置的dns緩存。 會有幫助嗎? 也許在某些情況下。 我們的組織在每個服務器上運行本地dns緩存,並在那里指向resolv.conf。 因此,在語言中進行緩存並不一定有助於我們。

有一些解決方案可以幫助您。 這個包似乎有一個很好的解決方案。 從他們自述的片段中你甚至可以做到:

http.DefaultClient.Transport = &http.Transport {
  MaxIdleConnsPerHost: 64,
  Dial: func(network string, address string) (net.Conn, error) {
    separator := strings.LastIndex(address, ":")
    ip, _ := dnscache.FetchString(address[:separator])
    return net.Dial("tcp", ip + address[separator:])
  },
}

http.Get和朋友的所有http請求啟用它。

Go解析器不執行任何進程內緩存。 雖然可以自己動手,但最好的辦法是在每台機器上運行系統范圍的DNS緩存。 (我最喜歡的是dnsmasq 。)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM