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_INET
或socket.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
之前已返回)。
- class tornado.netutil.Resolver(*args: Any, **kwargs: Any)[源代码]¶
可配置的异步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: socket.AddressFamily = AddressFamily.AF_UNSPEC) Awaitable[List[Tuple[int, Any]]] [源代码]¶
解析地址。
这个
host
参数是一个字符串,可以是主机名或文本IP地址。返回A
Future
其结果是(系列、地址)对的列表,其中地址是适合传递给的元组socket.connect
(即(host, port)
ipv4对;ipv6可能存在其他字段)。如果Acallback
如果传递,则在完成时将以结果作为参数运行。- 引发
IOError -- 如果地址无法解析。
在 4.4 版更改: 标准化所有实施以提高
IOError
.在 6.0 版更改: 这个
callback
参数已删除。请改用返回的等待对象。
- 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。