Tornado 各種網(wǎng)絡(luò)應(yīng)用程序

2022-03-10 11:31 更新

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]

創(chuàng)建綁定到給定端口和地址的偵聽套接字。

返回套接字對(duì)象的列表(如果給定地址映射到多個(gè) IP 地址,則返回多個(gè)套接字,這對(duì)于混合使用 IPv4 和 IPv6 最常見)。

地址可以是 IP 地址或主機(jī)名。 如果是主機(jī)名,服務(wù)器將偵聽與該名稱關(guān)聯(lián)的所有 IP 地址。 Address 可以是空字符串或 None 以偵聽所有可用接口。 Family 可以設(shè)置為 ?socket.AF_INET? 或 ?socket.AF_INET6? 以限制 IPv4 或 IPv6 地址,否則將使用兩者(如果可用)。

?backlog參數(shù)與 ?socket.listen()的含義相同。

?flags是 ?getaddrinfo的 AI_* 標(biāo)志位掩碼,如 ?socket.AI_PASSIVE | socket.AI_NUMERICHOST?

?reuse_port?選項(xiàng)為列表中的每個(gè)套接字設(shè)置 ?SO_REUSEPORT ?選項(xiàng)。 如果您的平臺(tái)不支持此選項(xiàng),則會(huì)引發(fā) ValueError。

tornado.netutil.bind_unix_socket(file: str, mode: int = 384, backlog: int = 128) → socket.socket

創(chuàng)建一個(gè)監(jiān)聽 unix 套接字。

如果具有給定名稱的套接字已經(jīng)存在,它將被刪除。 如果存在具有該名稱的任何其他文件,則會(huì)引發(fā)異常。

返回一個(gè)套接字對(duì)象(不是像 ?bind_sockets這樣的套接字對(duì)象列表)

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

添加 ?IOLoop事件處理程序以接受 ?sock上的新連接。

當(dāng)一個(gè)連接被接受時(shí),?callback(connection, address)?會(huì)被運(yùn)行(?connection?是一個(gè)?socket?對(duì)象,?address?是連接另一端的地址)。 請(qǐng)注意,此簽名與用于 ?IOLoop處理程序的回調(diào)?(fd,events)?簽名不同。

返回一個(gè)可調(diào)用對(duì)象,調(diào)用該可調(diào)用對(duì)象時(shí),將刪除 ?IOLoop事件處理程序并停止處理進(jìn)一步的傳入連接。

在 5.0 版中更改: ?io_loop ?參數(shù)(自 4.1 版以來已棄用)已被刪除。

在 5.0 版更改:返回一個(gè)可調(diào)用對(duì)象(之前沒有返回)。

tornado.netutil.is_valid_ip(ip: str) → bool

如果給定的字符串是格式正確的 IP 地址,則返回 ?True?。

支持 IPv4 和 IPv6。

class tornado.netutil.Resolver

可配置的異步 DNS 解析器接口。

默認(rèn)情況下,使用阻塞實(shí)現(xiàn)(簡單地調(diào)用 ?socket.getaddrinfo?)。 可以使用 ?Resolver.configure? 類方法選擇替代實(shí)現(xiàn):

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

Tornado 包含的這個(gè)接口的實(shí)現(xiàn)是

  • ?tornado.netutil.DefaultExecutorResolver?
  • ?tornado.netutil.BlockingResolver?(已棄用)
  • ?tornado.netutil.ThreadedResolver?(已棄用)
  • ?tornado.netutil.OverrideResolver?
  • ?tornado.platform.twisted.TwistedResolver?
  • ?tornado.platform.caresresolver.CaresResolver?

在 5.0 版更改: 默認(rèn)實(shí)現(xiàn)已從 ?BlockingResolver更改為 ?DefaultExecutorResolver?。

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

解析地址。

?host參數(shù)是一個(gè)字符串,可以是主機(jī)名或文字 IP 地址。

返回一個(gè) ?Future?,其結(jié)果是 (family, address) 對(duì)的列表,其中 address 是一個(gè)適合傳遞給 ?socket.connect? 的元組(即 IPv4 的 ?(host, port)? 對(duì);IPv6 可能存在其他字段)。 如果傳遞了回調(diào),它將在完成時(shí)將結(jié)果作為參數(shù)運(yùn)行。

引發(fā):?IOError ?– 如果地址無法解析。

在 4.4 版更改:標(biāo)準(zhǔn)化所有實(shí)現(xiàn)以引發(fā) ?IOError?。

在 6.0 版更改: 回調(diào)參數(shù)已刪除。 請(qǐng)改用返回的可等待對(duì)象。

close() → None

關(guān)閉解析器,釋放所有使用的資源。

class tornado.netutil.DefaultExecutorResolver

使用 ?IOLoop.run_in_executor? 的解析器實(shí)現(xiàn)。

class tornado.netutil.ExecutorResolver

使用 ?concurrent.futures.Executor? 的解析器實(shí)現(xiàn)。

當(dāng)您需要對(duì)正在使用的執(zhí)行器進(jìn)行額外控制時(shí),請(qǐng)使用它而不是 ?ThreadedResolver?。

除非?close_resolver=False?,否則當(dāng)?resolver?關(guān)閉時(shí)?executor?會(huì)被關(guān)閉; 如果您想在其他地方重用相同的執(zhí)行器,請(qǐng)使用它。

在 5.0 版中更改: ?io_loop ?參數(shù)(自 4.1 版以來已棄用)已被刪除。

5.0 版后已棄用:默認(rèn)解析器現(xiàn)在使用 ?IOLoop.run_in_executor?; 使用它而不是此類。

class tornado.netutil.BlockingResolver

默認(rèn)解析器實(shí)現(xiàn),使用 ?socket.getaddrinfo?。

?IOLoop將在解析期間被阻止,盡管回調(diào)將在下一次 ?IOLoop迭代之前運(yùn)行。

5.0 版后已棄用:默認(rèn)解析器現(xiàn)在使用 ?IOLoop.run_in_executor?; 使用它而不是此類。

class tornado.netutil.ThreadedResolver

多線程非阻塞解析器實(shí)現(xiàn)。

需要安裝 ?concurrent.futures? 包(自 Python 3.2 起在標(biāo)準(zhǔn)庫中可用,可在舊版本中使用 ?pip install futures? 安裝)。

線程池大小可以配置為:

Resolver.configure('tornado.netutil.ThreadedResolver',
                   num_threads=10)

在 3.1 版更改: 所有 ?ThreadedResolver共享一個(gè)線程池,其大小由要?jiǎng)?chuàng)建的第一個(gè)設(shè)置。

5.0 版后已棄用:默認(rèn)解析器現(xiàn)在使用 ?IOLoop.run_in_executor?; 使用它而不是此類。

class tornado.netutil.OverrideResolver

使用覆蓋映射包裝解析器。

這可用于進(jìn)行本地 DNS 更改(例如用于測(cè)試),而無需修改系統(tǒng)范圍的設(shè)置。

映射可以是三種格式:

{
    # 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 版更改: 添加了對(duì)主機(jī)端口系列三元組的支持。

tornado.netutil.ssl_options_to_context(ssl_options: Union[Dict[str, Any], ssl.SSLContext]) → ssl.SSLContext

嘗試將 ?ssl_options字典轉(zhuǎn)換為 ?SSLContext對(duì)象。

?ssl_options字典包含要傳遞給 ?ssl.wrap_socket? 的關(guān)鍵字。 在 Python 2.7.9+ 中,可以改用 ?ssl.SSLContext? 對(duì)象。 此函數(shù)將dict表單轉(zhuǎn)換為其 ?SSLContext等效項(xiàng),并且可以在接受這兩種表單的組件需要升級(jí)到 ?SSLContext ?版本以使用 ?SNI或 ?NPN等功能時(shí)使用。

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? 對(duì)象或字典(由 ?ssl_options_to_context? 接受)。 額外的關(guān)鍵字參數(shù)被傳遞給 ?wrap_socket?(?SSLContext方法或 ?ssl模塊函數(shù),視情況而定)。


以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)