阿西河

所有教程

公众号
🌙
阿西河前端的公众号

我的收藏

    最近访问  (文章)

      教程列表

      抓包专区
      测试专区

      Node.js dns 注意事项

      Node.js dns 注意事项

      尽管dns.lookup()和各种dns.resolve *()/ dns.reverse()函数有相同的目标将网络的名字与网络地址联系在一起(反之亦然),他们的行为是完全不同的。 这些差异可以有微妙但重大影响着Node.js程序行为。

      dns.lookup()

      在底层,dns.lookup()使用操作系统设施与大多数其他程序相同。例如, dns.lookup()几乎总是解析给定的主机名与ping命令一样。在许多类POSIX操作系统中, dns.lookup()函数的行为可以通过改变nsswitch.conf(5)并且/或resolv.conf(5)设置进行改变,但是需要注意改变这些文件就意味着改变所有正在这个操作系统中运行 的所有进程的行为。

      尽管以异步JavaScript的角度来调用dns.lookup(),但在内部libuv底层线程池中却是同步的调用getaddrinfo(3)。 This can have surprising negative performance implications for some applications, see the UV_THREADPOOL_SIZE documentation for more information.

      Note that various networking APIs will call dns.lookup() internally to resolve host names. If that is an issue, consider resolving the hostname to and address using dns.resolve() and using the address instead of a host name. Also, some networking APIs (such as socket.connect() and dgram.createSocket()) allow the default resolver, dns.lookup(), to be replaced.

      dns.resolve()、dns.resolve*() 与 dns.reverse()

      这些功能实现与dns.lookup()截然不同。它们不仅没有使用getaddrinfo(3)并且通过网络执行DNS查询。使用异步网络通信,并且没有使用libuv线程池。

      因此,这些函数不会像使用libuv线程池的dns.lookup()函数一样会对其它进程有负面影响。

      它们不像dns.lookup()一样使用相同的配置文件。例如,它们不会使用来自/etc/hosts配置。


      更多内容请参考:Node.js dns 域名服务器,或者通过 点击对应菜单 进行查看;


      目录
      目录