Tornado 各种网络应用程序
tornado.netutil.bind_sockets(port: int, address: Optional[str] = None, family: socket.AddressFamily = <AddressFamily.AF_UNSPEC: 0>, backlog: int = 128, flags: Optional[int] = None, reuse_port: bool = False) → List[socket.socket]
创建绑定到给定端口和地址的侦听套接字。
返回套接字对象的列表(如果给定地址映射到多个 IP 地址,则返回多个套接字,这对于混合使用 IPv4 和 IPv6 最常见)。
地址可以是 IP 地址或主机名。 如果是主机名,服务器将侦听与该名称关联的所有 IP 地址。 Address 可以是空字符串或 None 以侦听所有可用接口。 Family 可以设置为 socket.AF_INET
或 socket.AF_INET6
以限制 IPv4 或 IPv6 地址,否则将使用两者(如果可用)。
backlog
参数与 socket.listen()
的含义相同。
flags
是 getaddrinfo
的 AI_* 标志位掩码,如 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 套接字。
如果具有给定名称的套接字已经存在,它将被删除。 如果存在具有该名称的任何其他文件,则会引发异常。
返回一个套接字对象(不是像 bind_sockets
这样的套接字对象列表)
tornado.netutil.add_accept_handler(sock: socket.socket, callback: Callable[[socket.socket, Any], None]) → Callable[[], None]
添加 IOLoop
事件处理程序以接受 sock
上的新连接。
当一个连接被接受时,callback(connection, address)
会被运行(connection
是一个socket
对象,address
是连接另一端的地址)。 请注意,此签名与用于 IOLoop
处理程序的回调(fd,events)
签名不同。
返回一个可调用对象,调用该可调用对象时,将删除 IOLoop
事件处理程序并停止处理进一步的传入连接。
在 5.0 版中更改: io_loop
参数(自 4.1 版以来已弃用)已被删除。
在 5.0 版更改:返回一个可调用对象(之前没有返回)。
tornado.netutil.is_valid_ip(ip: str) → bool
如果给定的字符串是格式正确的 IP 地址,则返回 True
。
支持 IPv4 和 IPv6。
class tornado.netutil.Resolver
可配置的异步 DNS 解析器接口。
默认情况下,使用阻塞实现(简单地调用 socket.getaddrinfo
)。 可以使用 Resolver.configure
类方法选择替代实现:
Resolver.configure('tornado.netutil.ThreadedResolver')
Tornado 包含的这个接口的实现是
-
tornado.netutil.DefaultExecutorResolver
-
tornado.netutil.BlockingResolver
(已弃用) -
tornado.netutil.ThreadedResolver
(已弃用) -
tornado.netutil.OverrideResolver
-
tornado.platform.twisted.TwistedResolver
-
tornado.platform.caresresolver.CaresResolver
在 5.0 版更改: 默认实现已从 BlockingResolver
更改为 DefaultExecutorResolver
。
resolve(host: str, port: int, family: socket.AddressFamily = <AddressFamily.AF_UNSPEC: 0>) → Awaitable[List[Tuple[int, Any]]]
解析地址。
host
参数是一个字符串,可以是主机名或文字 IP 地址。
返回一个 Future
,其结果是 (family, address) 对的列表,其中 address 是一个适合传递给 socket.connect
的元组(即 IPv4 的 (host, port)
对;IPv6 可能存在其他字段)。 如果传递了回调,它将在完成时将结果作为参数运行。
引发:IOError
– 如果地址无法解析。
在 4.4 版更改:标准化所有实现以引发 IOError
。
在 6.0 版更改: 回调参数已删除。 请改用返回的可等待对象。
close() → None
关闭解析器,释放所有使用的资源。
class tornado.netutil.DefaultExecutorResolver
使用 IOLoop.run_in_executor
的解析器实现。
class tornado.netutil.ExecutorResolver
使用 concurrent.futures.Executor
的解析器实现。
当您需要对正在使用的执行器进行额外控制时,请使用它而不是 ThreadedResolver
。
除非close_resolver=False
,否则当resolver
关闭时executor
会被关闭; 如果您想在其他地方重用相同的执行器,请使用它。
在 5.0 版中更改: io_loop
参数(自 4.1 版以来已弃用)已被删除。
5.0 版后已弃用:默认解析器现在使用 IOLoop.run_in_executor
; 使用它而不是此类。
class tornado.netutil.BlockingResolver
默认解析器实现,使用 socket.getaddrinfo
。
IOLoop
将在解析期间被阻止,尽管回调将在下一次 IOLoop
迭代之前运行。
5.0 版后已弃用:默认解析器现在使用 IOLoop.run_in_executor
; 使用它而不是此类。
class tornado.netutil.ThreadedResolver
多线程非阻塞解析器实现。
需要安装 concurrent.futures
包(自 Python 3.2 起在标准库中可用,可在旧版本中使用 pip install futures
安装)。
线程池大小可以配置为:
Resolver.configure('tornado.netutil.ThreadedResolver',
num_threads=10)
在 3.1 版更改: 所有 ThreadedResolver
共享一个线程池,其大小由要创建的第一个设置。
5.0 版后已弃用:默认解析器现在使用 IOLoop.run_in_executor
; 使用它而不是此类。
class tornado.netutil.OverrideResolver
使用覆盖映射包装解析器。
这可用于进行本地 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]) → ssl.SSLContext
尝试将 ssl_options
字典转换为 SSLContext
对象。
ssl_options
字典包含要传递给 ssl.wrap_socket
的关键字。 在 Python 2.7.9+ 中,可以改用 ssl.SSLContext
对象。 此函数将dict
表单转换为其 SSLContext
等效项,并且可以在接受这两种表单的组件需要升级到 SSLContext
版本以使用 SNI
或 NPN
等功能时使用。
tornado.netutil.ssl_wrap_socket(socket: socket.socket, ssl_options: Union[Dict[str, Any], ssl.SSLContext], server_hostname: Optional[str] = None, **kwargs) → ssl.SSLSocket
返回包装给定套接字的ssl.SSLSocket
。
ssl_options
可以是ssl.SSLContext
对象或字典(由 ssl_options_to_context
接受)。 额外的关键字参数被传递给 wrap_socket
(SSLContext
方法或 ssl
模块函数,视情况而定)。