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