一個(gè)非阻塞的單線程 HTTP 服務(wù)器。
典型的應(yīng)用程序與 ?HTTPServer類幾乎沒有直接交互,除了在進(jìn)程開始時(shí)啟動(dòng)服務(wù)器(甚至通常通過tornado.web.Application.listen間接完成)。
在 4.0 版更改:曾經(jīng)存在于此模塊中的 ?HTTPRequest類已移至 ?tornado.httputil.HTTPServerRequest?。 舊名稱保留為別名。
一個(gè)非阻塞的單線程 HTTP 服務(wù)器。
服務(wù)器由 ?HTTPServerConnectionDelegate
?的子類定義,或者為了向后兼容,使用 ?HTTPServerRequest
作為參數(shù)的回調(diào)。 委托通常是一個(gè) ?tornado.web.Application
?。
?HTTPServer
默認(rèn)支持keep-alive 連接(對于HTTP/1.1 自動(dòng)支持,或者在客戶端請求?Connection: keep-alive
時(shí)支持HTTP/1.0)。
如果 ?xheaders
為 ?True
?,我們支持 ?X-Real-Ip
?/?X-Forwarded-For
? 和 ?X-Scheme
?/?X-Forwarded-Proto
? 標(biāo)頭,它們會(huì)覆蓋所有請求的遠(yuǎn)程 IP 和 URI 方案/協(xié)議。 在反向代理或負(fù)載均衡器后面運(yùn)行 Tornado 時(shí),這些表頭很有用。 如果 Tornado 在未設(shè)置受支持的 ?xheaders
?之一的 SSL 解碼代理后面運(yùn)行,則?protocol
?參數(shù)也可以設(shè)置為 ?https
?。
默認(rèn)情況下,在解析 ?X-Forwarded-For
? 標(biāo)頭時(shí),Tornado 將選擇主機(jī)列表中的最后一個(gè)(即最近的)地址作為遠(yuǎn)程主機(jī) IP 地址。 要選擇鏈中的下一個(gè)服務(wù)器,可以將受信任的下游主機(jī)列表作為?trusted_downstream
參數(shù)傳遞。 解析 ?X-Forwarded-For
? 標(biāo)頭時(shí)將跳過這些主機(jī)。
要使此服務(wù)器為 SSL 流量提供服務(wù),請發(fā)送帶有 ?ssl.SSLContext
? 對象的 ?ssl_options
? 關(guān)鍵字參數(shù)。 為了與舊版本的 Python 兼容,?ssl_options
? 也可能是 ?ssl.wrap_socket
? 方法的關(guān)鍵字參數(shù)字典。:
ssl_ctx = ssl.create_default_context(ssl.Purpose.CLIENT_AUTH)
ssl_ctx.load_cert_chain(os.path.join(data_dir, "mydomain.crt"),
os.path.join(data_dir, "mydomain.key"))
HTTPServer(application, ssl_options=ssl_ctx)
?HTTPServer
初始化遵循以下三種模式之一(初始化方法在 ?tornado.tcpserver.TCPServer
? 上定義):
1、?listen
?:簡單的單進(jìn)程:
server = HTTPServer(app)
server.listen(8888)
IOLoop.current().start()
在許多情況下,可以使用 ?tornado.web.Application.listen
? 來避免顯式創(chuàng)建 ?HTTPServer
? 的需要。
2、?bind
?/?start
?:簡單的多進(jìn)程:
server = HTTPServer(app)
server.bind(8888)
server.start(0) # Forks multiple sub-processes
IOLoop.current().start()
使用此接口時(shí),不得將 ?IOLoop
傳遞給 ?HTTPServer
構(gòu)造函數(shù)。 ?start
將始終在默認(rèn)單例 ?IOLoop
上啟動(dòng)服務(wù)器。
3、?add_sockets
?:先進(jìn)的多進(jìn)程:
sockets = tornado.netutil.bind_sockets(8888)
tornado.process.fork_processes(0)
server = HTTPServer(app)
server.add_sockets(sockets)
IOLoop.current().start()
?add_sockets
接口更復(fù)雜,但它可以與 ?tornado.process.fork_processes
? 一起使用,以便在分叉發(fā)生時(shí)給您更多的靈活性。如果您想以除 ?tornado.netutil.bind_sockets
? 之外的其他方式創(chuàng)建偵聽 sockets,則 ?add_sockets
? 也可用于單進(jìn)程服務(wù)器。
在 4.0 版更改:添加了 ?decompress_request
?、?chunk_size
?、?max_header_size
?、?idle_connection_timeout
?、?body_timeout
?、?max_body_size
參數(shù)。 添加了對 ?HTTPServerConnectionDelegate
實(shí)例作為 ?request_callback
的支持。
在 4.1 版更改:?HTTPServerConnectionDelegate.start_request
? 現(xiàn)在使用兩個(gè)參數(shù)(?server_conn
?,?request_conn
?)而不是一個(gè)(?request_conn
?)調(diào)用。
在 4.2 版更改:?HTTPServer
現(xiàn)在是 ?tornado.util.Configurable
? 的子類。
在 4.5 版更改: 添加了?trusted_downstream
參數(shù)。
在 5.0 版更改: ?io_loop
?參數(shù)已被刪除。
該類的公共接口主要繼承自 ?TCPServer
?,并記錄在該類下。
關(guān)閉所有打開的連接并異步等待它們完成。
此方法與 stop 結(jié)合使用以支持清除關(guān)閉(尤其是對于單元測試)。 典型用法是首先調(diào)用 ?stop()
? 停止接受新連接,然后 ?await close_all_connections()
? 等待現(xiàn)有連接完成。
此方法當(dāng)前不會(huì)關(guān)閉打開的 websocket 連接。
請注意,此方法是協(xié)程,必須與 ?await
一起調(diào)用。
更多建議: