Skip to main content

tornado.httpserver —非阻塞HTTP服务器

非阻塞,单线程HTTP服务器。

典型应用程序与 HTTPServer 类几乎没有直接交互,除非在进程开始时启动服务器(甚至通常通过 tornado.web.Application.listen 间接执行)。

在 4.0 版更改: 以前居住在此模块中的 HTTPRequest 类已移至 tornado.httputil.HTTPServerRequest。旧名称保留为别名。

HTTP服务器

class tornado.httpserver.HTTPServer(*args, **kwargs)[源代码]

非阻塞,单线程HTTP服务器。

服务器由 HTTPServerConnectionDelegate 的子类定义,或者为了向后兼容性,以 HTTPServerRequest 作为参数的回调。代表通常是 tornado.web.Application

默认情况下,HTTPServer 支持保持活动连接(对于HTTP/1.1自动启用,对于客户端请求 Connection: keep-alive 时则为HTTP/1.0)。

如果 xheadersTrue,我们支持 X-Real-Ip/X-Forwarded-ForX-Scheme/X-Forwarded-Proto 头,它覆盖所有请求的远程IP和URI方案/协议。当在逆向代理或负载均衡器之后运行Tornado时,这些头部很有用。如果Tornado在没有设置支持的 xheaders 的SSL解码代理之后运行,protocol 参数也可以设置为 https

要使此服务器提供SSL流量,请使用 ssl.SSLContext 对象发送 ssl_options 关键字参数。为了与旧版本的Python兼容,ssl_options 也可能是 ssl.wrap_socket 方法的关键字参数的字典。:

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 上定义):

  1. listen:简单的单过程:

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

    在许多情况下,tornado.web.Application.listen 可用于避免显式创建 HTTPServer 的需要。

  2. bind/start:简单的多进程:

    server = HTTPServer(app)
    server.bind(8888)
    server.start(0)  # Forks multiple sub-processes
    IOLoop.current().start()
    

    当使用此接口时,IOLoop 必须 not 传递给 HTTPServer 构造函数。 start 将始终在默认单例 IOLoop 上启动服务器。

  3. 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 接口更复杂,但它可以与 tornado.process.fork_processes 一起使用,以在叉发生时给您更多的灵活性。如果要以除 tornado.netutil.bind_sockets 之外的某种方式创建侦听套接字,add_sockets 也可以用于单进程服务器。

在 4.0 版更改: 添加了 decompress_requestchunk_sizemax_header_sizeidle_connection_timeoutbody_timeoutmax_body_size 参数。添加了对 HTTPServerConnectionDelegate 实例作为 request_callback 的支持。

在 4.1 版更改: HTTPServerConnectionDelegate.start_request 现在使用两个参数 (server_conn, request_conn) (根据文档)而不是一个 (request_conn) 来调用。

在 4.2 版更改: HTTPServer 现在是 tornado.util.Configurable 的子类。