tornado.netutil — Miscellaneous network utilities

杂项网络实用程序代码.

tornado.netutil.bind_sockets(port: int, address: str = None, family: socket.AddressFamily = <AddressFamily.AF_UNSPEC: 0>, backlog: int = 128, flags: int = None, reuse_port: bool = False) → List[socket.socket][source]

Creates listening sockets bound to the given port and address.

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

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

backlog参数的含义与socket.listen()含义相同.

flagsgetaddrinfo的AI_ *标志的位掩码,例如socket.AI_PASSIVE | socket.AI_NUMERICHOST 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[source]

创建一个监听的Unix套接字.

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

返回一个套接字对象(不是像bind_sockets这样的套接字对象列表)

tornado.netutil.add_accept_handler(sock: socket.socket, callback: Callable[[socket.socket, Any], None]) → Callable[[], None][source]

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

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

返回一个callable,当其被调用时,它将删除IOLoop事件处理程序并停止处理进一步的传入连接.

在5.0版中进行了更改: io_loop参数(从4.1版弃用)已被删除.

在版本5.0中进行了更改:返回了可调用对象(之前None返回None ).

tornado.netutil.is_valid_ip(ip: str) → bool[source]

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

支持IPv4和IPv6.

class tornado.netutil.Resolver[source]

可配置的异步DNS解析器接口.

默认情况下,使用阻塞实现(仅调用socket.getaddrinfo ). 可以使用Resolver.configure类方法选择一种替代实现:

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

Tornado随附的此接口的实现为

在版本5.0中更改:默认实现已从BlockingResolver更改为DefaultExecutorResolver .

resolve(host: str, port: int, family: socket.AddressFamily = <AddressFamily.AF_UNSPEC: 0>) → Awaitable[List[Tuple[int, Any]]][source]

解析地址.

host参数是一个字符串,可以是主机名或原义IP地址.

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

Raises

IOError –如果地址无法解析.

在版本4.4中进行了更改:标准化了所有实现以提高IOError .

在版本6.0中更改: callback参数已删除. 请使用返回的等待对象.

close() → None[source]

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

3.1版中的新功能.

class tornado.netutil.DefaultExecutorResolver[source]

使用IOLoop.run_in_executor解析器实现.

5.0版中的新功能.

class tornado.netutil.ExecutorResolver[source]

解析器实现使用concurrent.futures.Executor .

当您需要对使用的执行程序进行其他控制时,请使用此选项代替ThreadedResolver .

执行程序将在解析器关闭时关闭,除非close_resolver=False ; 如果要在其他地方重用同一执行程序,请使用此选项.

在5.0版中进行了更改: io_loop参数(从4.1版弃用)已被删除.

从版本5.0开始不推荐使用:默认Resolver现在使用IOLoop.run_in_executor ; 用那个代替这个类.

class tornado.netutil.BlockingResolver[source]

默认Resolver实现,使用socket.getaddrinfo .

IOLoop将分辨率期间不被阻止,但回调不会,直到下一次运行IOLoop迭代.

从版本5.0开始不推荐使用:默认Resolver现在使用IOLoop.run_in_executor ; 用那个代替这个类.

class tornado.netutil.ThreadedResolver[source]

Multithreaded non-blocking Resolver implementation.

需要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[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], ssl.SSLContext]) → ssl.SSLContext[source]

尝试将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: str = None, **kwargs) → ssl.SSLSocket[source]

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

ssl_options可以是ssl.SSLContext对象或字典(由ssl_options_to_context接受). 其他关键字参数将传递给wrap_socketSSLContext方法或相应的ssl模块函数).