tornado.netutil ---其他网络公用设施

其他网络实用程序代码。

tornado.netutil.bind_sockets(port: int, address: Optional[str] = None, family: socket.AddressFamily = AddressFamily.AF_UNSPEC, backlog: int = 128, flags: Optional[int] = None, reuse_port: bool = False) List[socket.socket][源代码]

创建绑定到给定端口和地址的侦听套接字。

返回套接字对象列表(如果给定地址映射到多个IP地址,则返回多个套接字,这对于混合使用IPv4和IPv6最为常见)。

地址可以是IP地址或主机名。如果是主机名,服务器将监听与该名称相关联的所有IP地址。地址可以是空字符串,也可以是在所有可用接口上侦听的无字符串。家庭可以设置为 socket.AF_INETsocket.AF_INET6 限制到IPv4或IPv6地址,否则,如果可用,将同时使用这两个地址。

这个 backlog 论点的含义与for相同 socket.listen() .

flags 是ai_*flags的位掩码 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.socket[源代码]

创建侦听Unix套接字。

如果已存在具有给定名称的套接字,则会将其删除。如果存在具有该名称的任何其他文件,将引发异常。

返回一个socket对象(不是像 bind_sockets

tornado.netutil.add_accept_handler(sock: socket.socket, callback: Callable[[socket.socket, Any], None]) Callable[[], None][源代码]

添加一个 IOLoop 接受新连接的事件处理程序 sock .

接受连接时, callback(connection, address) 将运行 (connection 是套接字对象,并且 address 是连接另一端的地址)。请注意,此签名与 callback(fd, events) 签名用于 IOLoop 处理程序。

返回一个可调用文件,当调用该文件时,将删除 IOLoop 事件处理程序并停止处理进一步的传入连接。

在 5.0 版更改: 这个 io_loop 已删除参数(自4.1版以来已弃用)。

在 5.0 版更改: 返回可调用文件 (None 之前已返回)。

tornado.netutil.is_valid_ip(ip: str) bool[源代码]

返回 True 如果给定的字符串是格式正确的IP地址。

支持IPv4和IPv6。

class tornado.netutil.Resolver(*args: Any, **kwargs: Any)[源代码]

可配置的异步DNS解析程序接口。

默认情况下,使用阻塞实现(只调用 socket.getaddrinfo )可以使用 Resolver.configure 类方法:

Resolver.configure('tornado.netutil.ThreadedResolver')

Tornado中包含的这个接口的实现是

在 5.0 版更改: 默认实现已从更改为 BlockingResolverDefaultExecutorResolver .

在 6.2 版更改: 默认实现已从 DefaultExecutorResolverDefaultLoopResolver

resolve(host: str, port: int, family: socket.AddressFamily = AddressFamily.AF_UNSPEC) Awaitable[List[Tuple[int, Any]]][源代码]

解析地址。

这个 host 参数是一个字符串,可以是主机名或文本IP地址。

返回A Future 其结果是(系列、地址)对的列表,其中地址是适合传递给的元组 socket.connect (即 (host, port) ipv4对;ipv6可能存在其他字段)。如果A callback 如果传递,则在完成时将以结果作为参数运行。

引发

IOError -- 如果地址无法解析。

在 4.4 版更改: 标准化所有实施以提高 IOError .

在 6.0 版更改: 这个 callback 参数已删除。请改用返回的等待对象。

close() None[源代码]

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

3.1 新版功能.

class tornado.netutil.DefaultExecutorResolver(*args: Any, **kwargs: Any)[源代码]

解析器实现使用 IOLoop.run_in_executor .

5.0 新版功能.

class tornado.netutil.DefaultLoopResolver(*args: Any, **kwargs: Any)[源代码]

解析器实现使用 asyncio.loop.getaddrinfo

class tornado.netutil.ExecutorResolver(*args: Any, **kwargs: Any)[源代码]

使用 concurrent.futures.Executor .

用这个代替 ThreadedResolver 当您需要对正在使用的执行器进行额外控制时。

当解析器关闭时,执行器将关闭,除非 close_resolver=False ;如果您想在其他地方重用同一个执行器,请使用这个。

在 5.0 版更改: 这个 io_loop 已删除参数(自4.1版以来已弃用)。

5.0 版后已移除: 默认设置 Resolver 现在使用 asyncio.loop.getaddrinfo ;使用那个而不是这个类。

class tornado.netutil.BlockingResolver(*args: Any, **kwargs: Any)[源代码]

违约 Resolver 实现,使用 socket.getaddrinfo .

这个 IOLoop 将在解析过程中被阻止,尽管回调将在下一个之前不运行 IOLoop 迭代。

5.0 版后已移除: 默认值 Resolver 现在使用 IOLoop.run_in_executor ;使用它而不是这个类。

class tornado.netutil.ThreadedResolver(*args: Any, **kwargs: Any)[源代码]

多线程非阻塞 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)[源代码]

使用重写映射包装冲突解决程序。

这可用于在不修改系统范围设置的情况下进行本地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], ssl.SSLContext], server_side: Optional[bool] = None) ssl.SSLContext[源代码]

尝试转换 ssl_options 字典到 SSLContext 对象。

这个 ssl_options 字典包含要传递到的关键字 ssl.wrap_socket . 在python 2.7.9+中, ssl.SSLContext 可以改用对象。此函数将dict窗体转换为 SSLContext 等效,并且当接受这两个表单的组件需要升级到 SSLContext 使用SNI或NPN等功能的版本。

在 6.2 版更改: 添加了SERVER_SIDE参数。省略此参数将导致在Python3.10上发出DeproationWarning。

tornado.netutil.ssl_wrap_socket(socket: socket.socket, ssl_options: Union[Dict[str, Any], ssl.SSLContext], server_hostname: Optional[str] = None, server_side: Optional[bool] = None, **kwargs: Any) ssl.SSLSocket[源代码]

返回一个 ssl.SSLSocket 包装给定的套接字。

ssl_options 可能是 ssl.SSLContext 对象或字典 ssl_options_to_context )其他关键字参数传递给 wrap_socket (或者 SSLContext 方法或 ssl 模块功能(视情况而定)。

在 6.2 版更改: 添加了SERVER_SIDE参数。省略此参数将导致在Python3.10上发出DeproationWarning。