Tornado 4.3文檔翻譯: HTTP 服務和客戶端-非阻塞 HTTP server

譯者說

Tornado 4.3於2015年11月6日發佈,該版本正式支持Python3.5async/await關鍵字,而且用舊版本CPython編譯Tornado一樣可使用這兩個關鍵字,這無疑是一種進步。其次,這是最後一個支持Python2.6Python3.2的版本了,在後續的版本了會移除對它們的兼容。如今網絡上尚未Tornado4.3的中文文檔,因此爲了讓更多的朋友能接觸並學習到它,我開始了這個翻譯項目,但願感興趣的小夥伴能夠一塊兒參與翻譯,項目地址是tornado-zh on Github,翻譯好的文檔在Read the Docs上直接能夠看到。歡迎Issues or PR。本節感謝@ladrift翻譯git

PS:本節最好直接在https://tornado-zh.readthedocs.org或者http://tornado.moelove.info/閱讀,以得到更好的閱讀體驗(格式支持)。原諒我沒排好版QAQ

tornado.httpserver — 非阻塞 HTTP server

非阻塞,單線程 HTTP server。github

典型的應用不多與 HTTPServer 類直接交互,除非在進程開始時開啓server (儘管這常常間接的經過 tornado.web.Application.listen 來完成)。web

在 4.0 版更改: 曾經在此模塊中的 HTTPRequest 類 已經被移到 tornado.httputil.HTTPServerRequest 。 其舊名稱仍做爲一個別名。網絡

HTTP Server

class tornado.httpserver.HTTPServer(args, *kwargs)

非阻塞,單線程 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

listen: 簡單的單進程:

server = HTTPServer(app)
server.listen(8888)
IOLoop.current().start()

在不少情形下, tornado.web.Application.listen 能夠用來避免顯式的 建立 HTTPServer 。

bind/start: 簡單的多進程:

server = HTTPServer(app)
server.bind(8888)
server.start(0)  # Fork 多個子進程
IOLoop.current().start()

當使用這個接口時,一個 IOLoop 不能被傳給 HTTPServer 的構造方法(constructor)。 start 將默認 在單例 IOLoop 上開啓server。

add_sockets: 高級多進程:

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 的一個子類。

相關文章
相關標籤/搜索