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_INETsocket.AF_INET6 以限制为 IPv4 或 IPv6 地址,否则如果可用,则将使用两者。

The backlog argument 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_loop argument (deprecated since version 4.1) has been removed.

在版本 5.0 中更改: 返回一个可调用对象(之前返回 None)。

tornado.netutil.is_valid_ip(ip: str) bool[source]

如果给定字符串是格式良好的 IP 地址,则返回 True

支持 IPv4 和 IPv6。

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 参数。请改用返回的等待对象。

close() None[source]

关闭 Resolver,释放所使用的任何资源。

在版本 3.1 中新增。

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_loop argument (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。