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 forsocket.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。