Как мне установить DNS-кеш для сетевого пакета? - PullRequest
0 голосов
/ 25 января 2019

В пакете "net / http" я могу кэшировать DNS-запросы:

client := &http.Client{
        Transport: &http.Transport{
            Dial: (&nett.Dialer{
                Resolver: &nett.CacheResolver{TTL: 5 * time.Minute},
                IPFilter: nett.DualStack,
            }).Dial,
        },

    }

затем используйте клиент для поиска веб-сайтов. Как мне кэшировать DNS-запросы для сетевого пакета? например, обратный DNS-запрос:

net.LookupAddr(ip)

Поскольку переменная не использует переменную, я не совсем понимаю, как ее настроить и как узнать, использую ли я кэшированный экземпляр.

Ответы [ 2 ]

0 голосов
/ 25 января 2019

В пакете nett, похоже, есть только один метод "Resolve", а не LookupAddr, LookupIP и т. Д. И т. Д., Которые есть в официальном сетевом пакете.Так что обратные поиски не доступны.Вот как сделать нормальный поиск адреса по имени

package main

import (
    "github.com/abursavich/nett"
    "time"
)

func main() {
    r := nett.CacheResolver{TTL: 5 * time.Minute}
    a, _ := r.Resolve("muppet.com")
    for _, i := range a {
        print(i.String())
    }
}
0 голосов
/ 25 января 2019

Казалось бы, поведение net.LookupAddr заключается в использовании распознавателя хоста. То, как я делаю это для своих сервисов в prod, - это запуск dnsmasq на хостах, чтобы поиск DNS кэшировался для каждого хоста. В документах упоминается, что вы можете настроить поведение, внедрив собственный Resolver, как вы это сделали: https://golang.org/pkg/net/#LookupAddr

Но я думаю, что часть, которую вы ищете (из верхней части этой страницы документа):

DefaultResolver - это распознаватель, используемый функциями поиска на уровне пакета и программами набора номера без указанного Resolver.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...