很明显它会使用扭曲的名称api而不是任何阻止方法来解析主机名。
但是在源代码中挖掘,我一直无法找到名称解析发生的地方。有人可以指向我发生主机解析的相关源代码(例如,当尝试执行connectTCP
时)。
我确实需要确保connectTCP
不会使用阻止DNS解析。
答案 0 :(得分:3)
似乎显而易见,不是吗?
不幸的是:
/etc/resolv.conf
?即使在Linux和DNS的特定情况下,您也可能需要查找任意数量的文件来查找名称服务器。/etc/nsswitch.conf
之间的顺序。getaddrinfo_a
也会通过SIGIO暴露其非阻塞性,而不仅仅是您可以观看的文件描述符。这意味着,like POSIX AIO,它可能只是你背后的核心线程。由于这些原因,Twisted默认使用只在线程中调用gethostbyname
的解析器。
但是,如果您知道适用于您的应用,则仅使用DNS进行主机名解析是合适的,并且您希望使用twisted.names
而不是平台解析程序 - 在其他如果规模对你而言比对深奥的名称解析用例更重要 - 这是支持的。您可以从install resolver twisted.names.client
appropriately configured for your application到反应堆{{3}},所有未来的内置名称解析都将使用该解析器进行。
答案 1 :(得分:1)
我不是很熟悉twisted
,我最近才开始使用它。它看起来似乎没有阻止,但仅限于支持线程的平台。
在twisted.internet.base
中的ReactorBase
看起来它通过它的resolve
方法解析它会从self.resolver.getHostByName
返回延迟。
self.resolver
默认情况下是BlockingResolver
的一个实例,它会阻止,但看起来如果平台支持线程,则解析器实例会被ThreadedResolver
替换为ReactorBase._initThreads
方法。