tornado.httpserver ---非阻塞HTTP服务器

一个非阻塞的单线程HTTP服务器。

典型的应用程序与 HTTPServer 类,除了在进程开始时启动服务器(甚至通常是通过 tornado.web.Application.listen

在 4.0 版更改: 这个 HTTPRequest 以前生活在此模块中的类已移动到 tornado.httputil.HTTPServerRequest . 旧名称保留为别名。

HTTP服务器

class tornado.httpserver.HTTPServer(request_callback: Union[httputil.HTTPServerConnectionDelegate, Callable[[httputil.HTTPServerRequest], None]], no_keep_alive: bool = False, xheaders: bool = False, ssl_options: Union[Dict[str, Any], ssl.SSLContext] = None, protocol: Optional[str] = None, decompress_request: bool = False, chunk_size: Optional[int] = None, max_header_size: Optional[int] = None, idle_connection_timeout: Optional[float] = None, body_timeout: Optional[float] = None, max_body_size: Optional[int] = None, max_buffer_size: Optional[int] = None, trusted_downstream: Optional[List[str]] = None)[源代码]

一个非阻塞的单线程HTTP服务器。

服务器由以下子类定义 HTTPServerConnectionDelegate 或者,为了向后兼容,回调 HTTPServerRequest 作为一个论点。代表通常是 tornado.web.Application .

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

如果 xheaders is True, we support the X-Real-Ip/X-Forwarded-ForX-Scheme/X-Forwarded-Proto 头,它覆盖所有请求的远程IP和URI方案/协议。当在反向代理或负载平衡器后面运行Tornado时,这些头非常有用。这个 protocol 参数也可以设置为 https 如果Tornado运行在未设置支持的 xheaders .

默认情况下,在分析 X-Forwarded-For 头,Tornado将选择主机列表上的最后一个(即最近的)地址作为远程主机IP地址。要选择链中的下一个服务器,可以将受信任的下游主机列表作为 trusted_downstream 争论。解析时将跳过这些主机 X-Forwarded-For 标题。

要使此服务器提供SSL通信,请发送 ssl_options 关键字参数 ssl.SSLContext 对象。与旧版本的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(application, 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 /` ~tornado.tcpserver.tcpserver.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 当叉子出现时给你更多的灵活性。 add_sockets 如果您希望以其他方式创建侦听套接字,也可以在单进程服务器中使用 tornado.netutil.bind_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 .

在 4.5 版更改: 增加了 trusted_downstream 争论。

在 5.0 版更改: 这个 io_loop 参数已删除。

此类的公共接口主要继承自 TCPServer 并记录在该类下。

coroutine close_all_connections() → None[源代码]

关闭所有打开的连接并异步等待它们完成。

此方法与 stop 支持清洁停机(尤其是单元测试)。典型的用法是 stop() 首先停止接受新连接,然后 await close_all_connections() 等待现有连接完成。

此方法当前不关闭打开的WebSocket连接。

请注意,此方法是协同程序,必须使用 await .