約10,000個のCNAMEを解決するプログラムを作成しています。dns.resolveCnameは、解決するCNAMEが大量にある場合に失敗します。
問題は、解決するCNAMEの数が非常に多くなった場合にがError: queryCname ESERVFAIL
エラーを返すことです。
コードは、次のようになります。
const dns = require('dns')
dns.setServers(['8.8.8.8']) // provided by google
let cnames = [....] // length of cnames is 10,000
let promiseArr = []
for (let i = 0; i < cnames.length; i += 1) {
let p = new Promise((resolve, reject) => {
dns.resolveCname(cnames[i], (err, records) => {
if (err) {
console.log(err) // this line generates Error: queryCname ESERVFAIL
resolve() // sorry, I forgot adding this line.
} else {
console.log(records)
resolve() // sorry, I forgot adding this line.
}
})
})
promiseArr.push(p)
}
Promise.all(promiseArr)
.then(value => {
console.log(`Promise.all done`)
})
.catch(err => {
console.log(`promise err: ${err}`)
})
それは私があまりにも頻繁にdns.resolveCname()
を使用できないことを意味するのでしょうか?
この問題を回避するには、トリガーする頻度を減らすことが可能ですかdns.resolveCname()
?
この問題を解決する方法はありますか?
私はnode.js v6.2.2を使用しています。