Tornado 4.3
於2015年11月6日發佈,該版本正式支持Python3.5
的async
/await
關鍵字,而且用舊版本CPython編譯Tornado一樣可使用這兩個關鍵字,這無疑是一種進步。其次,這是最後一個支持Python2.6
和Python3.2
的版本了,在後續的版本了會移除對它們的兼容。如今網絡上尚未Tornado4.3
的中文文檔,因此爲了讓更多的朋友能接觸並學習到它,我開始了這個翻譯項目,但願感興趣的小夥伴能夠一塊兒參與翻譯,項目地址是tornado-zh on Github,翻譯好的文檔在Read the Docs上直接能夠看到。歡迎Issues or PR。本節感謝@ladrift翻譯git
非阻塞,單線程 HTTP server。github
典型的應用不多與 HTTPServer 類直接交互,除非在進程開始時開啓server (儘管這常常間接的經過 tornado.web.Application.listen 來完成)。web
在 4.0 版更改: 曾經在此模塊中的 HTTPRequest 類 已經被移到 tornado.httputil.HTTPServerRequest 。 其舊名稱仍做爲一個別名。網絡
非阻塞,單線程 HTTP server。app
一個server能夠由一個 HTTPServerConnectionDelegate 的子類定義, 或者,爲了向後兼容,由一個以 HTTPServerRequest 爲參數的callback定義。 它的委託對象(delegate)一般是 tornado.web.Application 。負載均衡
HTTPServer 默認支持keep-alive連接(對於HTTP/1.1自動開啓,而對於HTTP/1.0, 須要client發起 Connection: keep-alive 請求)。dom
若是 xheaders 是 True ,咱們支持 X-Real-Ip/X-Forwarded-For 和 X-Scheme/X-Forwarded-Proto 首部字段,他們將會覆蓋 全部請求的 remote IP 與 URI scheme/protocol 。 當Tornado運行在反向代理或者負載均衡(load balancer)以後時, 這些首部字段很是有用。若是Tornado運行在一個不設置任何一個支持的 xheaders 的SSL-decoding代理以後, protocol 參數也能設置爲 https 。socket
要使server能夠服務於SSL加密的流量,須要把 ssl_option 參數 設置爲一個 ssl.SSLContext 對象。爲了兼容舊版本的Python ssl_options 可能也是一個字典(dictionary),其中包含傳給 ssl.wrap_socket 方法的關鍵 字參數。:async
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(applicaton, ssl_options=ssl_ctx)
HTTPServer 的初始化依照如下三種模式之一(初始化方法定義 在 tornado.tcpserver.TCPServer ):tcp
server = HTTPServer(app) server.listen(8888) IOLoop.current().start()
在不少情形下, tornado.web.Application.listen 能夠用來避免顯式的 建立 HTTPServer 。
server = HTTPServer(app) server.bind(8888) server.start(0) # Fork 多個子進程 IOLoop.current().start()
當使用這個接口時,一個 IOLoop 不能被傳給 HTTPServer 的構造方法(constructor)。 start 將默認 在單例 IOLoop 上開啓server。
sockets = tornado.netutil.bind_sockets(8888) tornado.process.fork_processes(0) server = HTTPServer(app) server.add_sockets(sockets) IOLoop.current().start()
add_sockets 接口更加複雜, 可是,當fork發生的時候,它能夠與 tornado.process.fork_processes 一塊兒使用來提供更好的靈活性。 若是你想使用其餘的方法,而不是 tornado.netutil.bind_sockets , 來建立監聽socket, add_sockets 也能夠被用在單進程server中。
在 4.0 版更改: 增長了 decompress_request
, chunk_size
, max_header_size
, idle_connection_timeout
, body_timeout
, max_body_size
參數。支持 HTTPServerConnectionDelegate 實例化爲 request_callback 。
在 4.1 版更改: HTTPServerConnectionDelegate.start_request 如今須要傳入兩個參數來調用 (server_conn, request_conn) (根據文檔內容)而不是一個 (request_conn).
在 4.2 版更改: HTTPServer 如今是 tornado.util.Configurable 的一個子類。