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 的一个子类。