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
isTrue
, we support theX-Real-Ip
/X-Forwarded-For
和X-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
):listen
:简单单进程:server = HTTPServer(app) server.listen(8888) IOLoop.current().start()
在许多情况下,
tornado.web.Application.listen
可用于避免需要显式创建HTTPServer
.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
.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_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
.在 4.5 版更改: 增加了
trusted_downstream
参数。在 5.0 版更改: 这个
io_loop
参数已删除。此类的公共接口主要继承自
TCPServer
并记录在该类下。