【问题标题】:DNS Prefetch inside AWS Node.js LambdaAWS Node.js Lambda 中的 DNS 预取
【发布时间】:2021-12-29 02:15:21
【问题描述】:

我正在尝试在 node.js Lambda 函数中预取 DNS 记录。我已经检测了我的 http 请求(使用 Sentry),以显示套接字完成 dns 查找需要多长时间,以及建立 TCP 连接需要多长时间。

当我在我的机器上本地运行该函数时,它可以工作 - http 请求几乎不需要任何时间来执行查找

但是当我在 AWS Lambda 上运行该函数时,DNS 查找仍然需要一些时间,就好像预取没有填充查找表一样。这是实现:

import dns from 'dns'

export const dnsPrefetch = url => {
  const address = new URL(url).hostname
  dns.lookup(address, { hints: dns.ADDRCONFIG }, () => {})
}

然后在一个模块中,我可能会这样使用它:dnsPrefetch('https://url.to/graphql')

知道为什么 DNS 预取不能在 Lambda 上运行吗?

【问题讨论】:

    标签: node.js lambda dns


    【解决方案1】:

    尝试将其包装在 Promise 中:

    async function lookupPromise(url){
        return new Promise((resolve, reject) => {
            dns.lookup(url, (err, address, family) => {
                if(err) reject(err);
                resolve(address);
            });
       });
    }
    

    或者使用 dns 承诺:

    const dnsPromise = dns.promises;
    
    dnsPromise.lookup(url)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-07-17
      • 1970-01-01
      • 2018-11-20
      • 1970-01-01
      • 2015-08-18
      • 2019-01-19
      • 2021-09-19
      相关资源
      最近更新 更多