tornado.netutil — 各种网络实用程序¶
各种网络实用程序代码。
- tornado.netutil.bind_sockets(port: int, address: Optional[str] = None, family: AddressFamily = AddressFamily.AF_UNSPEC, backlog: int = 128, flags: Optional[int] = None, reuse_port: bool = False) List[socket][source]¶
- 创建绑定到给定端口和地址的监听套接字。 - 返回一个套接字对象列表(如果给定地址映射到多个 IP 地址,则返回多个套接字,这在混合 IPv4 和 IPv6 使用时最为常见)。 - 地址可以是 IP 地址或主机名。如果是主机名,服务器将监听与该名称关联的所有 IP 地址。地址可以是空字符串或 None,以监听所有可用的接口。Family 可以设置为 - socket.AF_INET或- socket.AF_INET6以限制为 IPv4 或 IPv6 地址,否则如果可用,则将使用两者。- The - backlogargument has the same meaning as for- socket.listen().- flags是一个 AI_* 标志的位掩码,用于- getaddrinfo,例如- socket.AI_PASSIVE | socket.AI_NUMERICHOST.- reuse_port选项为列表中的每个套接字设置- SO_REUSEPORT选项。如果您的平台不支持此选项,将引发 ValueError。
- tornado.netutil.bind_unix_socket(file: str, mode: int = 384, backlog: int = 128) socket[source]¶
- 创建一个监听 Unix 套接字。 - 如果具有给定名称的套接字已存在,它将被删除。如果任何其他具有该名称的文件存在,将引发异常。 - 返回一个套接字对象(而不是像 - bind_sockets这样的套接字对象列表)
- tornado.netutil.add_accept_handler(sock: socket, callback: Callable[[socket, Any], None]) Callable[[], None][source]¶
- 在 - sock上添加一个- IOLoop事件处理程序以接受新连接。- 当连接被接受时,将运行 - callback(connection, address)(- connection是一个套接字对象,- address是连接另一端地址)。请注意,此签名与用于- IOLoop处理程序的- callback(fd, events)签名不同。- 返回一个可调用对象,当调用它时,它将删除 - IOLoop事件处理程序并停止处理进一步的传入连接。- 在版本 5.0 中更改: The - io_loopargument (deprecated since version 4.1) has been removed.- 在版本 5.0 中更改: 返回一个可调用对象(之前返回 - None)。
- class tornado.netutil.Resolver(*args: Any, **kwargs: Any)[source]¶
- 可配置的异步 DNS 解析器接口。 - 默认情况下,使用阻塞实现(它只是调用 - socket.getaddrinfo)。可以使用- Resolver.configure类方法选择替代实现- Resolver.configure('tornado.netutil.ThreadedResolver') - Tornado 中包含的此接口的实现是 - 在版本 5.0 中变更: 默认实现已从 - BlockingResolver变更为- DefaultExecutorResolver.- 在版本 6.2 中变更: 默认实现已从 - DefaultExecutorResolver变更为- DefaultLoopResolver.- resolve(host: str, port: int, family: AddressFamily = AddressFamily.AF_UNSPEC) Awaitable[List[Tuple[int, Any]]][source]¶
- 解析地址。 - host参数是一个字符串,它可以是主机名或文字 IP 地址。- 返回一个 - Future,其结果是 (family, address) 对的列表,其中 address 是一个适合传递给- socket.connect的元组(即 IPv4 的- (host, port)对;IPv6 可能存在其他字段)。如果传递了- callback,则在完成时将使用结果作为参数运行它。- 引发
- IOError – 如果无法解析地址。 
 - 在版本 4.4 中变更: 所有实现都已标准化为引发 - IOError.- 在版本 6.0 中变更: 已删除 - callback参数。请改用返回的等待对象。
 
- class tornado.netutil.DefaultExecutorResolver(*args: Any, **kwargs: Any)[source]¶
- 使用 - IOLoop.run_in_executor的解析器实现。- 在版本 5.0 中新增。 - 自版本 6.2 起已弃用: 请改用 - DefaultLoopResolver。
- class tornado.netutil.DefaultLoopResolver(*args: Any, **kwargs: Any)[source]¶
- 使用 - asyncio.loop.getaddrinfo的解析器实现。
- class tornado.netutil.ExecutorResolver(*args: Any, **kwargs: Any)[source]¶
- 使用 - concurrent.futures.Executor的解析器实现。- 当您需要对使用的执行器进行额外控制时,请使用它而不是 - ThreadedResolver。- 除非 - close_resolver=False,否则执行器将在解析器关闭时关闭;如果您想在其他地方重复使用同一个执行器,请使用此选项。- 在版本 5.0 中更改: The - io_loopargument (deprecated since version 4.1) has been removed.- 自版本 5.0 起已弃用: 默认的 - Resolver现在使用- asyncio.loop.getaddrinfo;请改用该类而不是此类。
- class tornado.netutil.BlockingResolver(*args: Any, **kwargs: Any)[source]¶
- 默认 - Resolver实现,使用- socket.getaddrinfo.- 在解析期间, - IOLoop将被阻塞,尽管回调直到下一个- IOLoop迭代才会运行。- 自版本 5.0 起弃用: 默认 - Resolver现在使用- IOLoop.run_in_executor;使用它而不是这个类。
- class tornado.netutil.ThreadedResolver(*args: Any, **kwargs: Any)[source]¶
- 多线程非阻塞 - Resolver实现。- 需要安装 - concurrent.futures包(自 Python 3.2 起在标准库中可用,在旧版本中可通过- pip install futures安装)。- 可以使用以下方法配置线程池大小: - Resolver.configure('tornado.netutil.ThreadedResolver', num_threads=10) - 在版本 3.1 中更改: 所有 - ThreadedResolvers共享一个线程池,其大小由第一个创建的线程池设置。- 自版本 5.0 起弃用: 默认 - Resolver现在使用- IOLoop.run_in_executor;使用它而不是这个类。
- class tornado.netutil.OverrideResolver(*args: Any, **kwargs: Any)[source]¶
- 使用覆盖映射包装解析器。 - 这可以用于进行本地 DNS 更改(例如,用于测试),而无需修改系统范围的设置。 - 映射可以采用三种格式 - { # Hostname to host or ip "example.com": "127.0.1.1", # Host+port to host+port ("login.example.com", 443): ("localhost", 1443), # Host+port+address family to host+port ("login.example.com", 443, socket.AF_INET6): ("::1", 1443), } - 在版本 5.0 中更改: 添加了对主机-端口-族三元组的支持。 
- tornado.netutil.ssl_options_to_context(ssl_options: Union[Dict[str, Any], SSLContext], server_side: Optional[bool] = None) SSLContext[source]¶
- 尝试将 - ssl_options字典转换为- SSLContext对象。- ssl_options字典包含要传递给- ssl.SSLContext.wrap_socket的关键字。在 Python 2.7.9+ 中,可以使用- ssl.SSLContext对象。此函数将字典形式转换为其- SSLContext等效项,并且可以在接受两种形式的组件需要升级到- SSLContext版本以使用 SNI 或 NPN 等功能时使用。- 在版本 6.2 中更改: 添加了 server_side 参数。在 Python 3.10 上省略此参数将导致 DeprecationWarning。 
- tornado.netutil.ssl_wrap_socket(socket: socket, ssl_options: Union[Dict[str, Any], SSLContext], server_hostname: Optional[str] = None, server_side: Optional[bool] = None, **kwargs: Any) SSLSocket[source]¶
- 返回包装给定套接字的 - ssl.SSLSocket。- ssl_options可以是- ssl.SSLContext对象或字典(如- ssl_options_to_context接受)。额外的关键字参数将传递给- ssl.SSLContext.wrap_socket.- 在版本 6.2 中更改: 添加了 server_side 参数。在 Python 3.10 上省略此参数将导致 DeprecationWarning。