app = tornado.web.Application(route) set router pass autoreload: 检查已使用源文件的修改时间
app.listen
tornado.httpserver.HTTPServer.listen(self –> app)
self.add_sockets(sockets=bind_sockets(port, address=address))
# 添加到ioloop
self._sockets[sock.fileno()] = sock
tornado.netutil.add_accept_handler(nock, self._handle_connection, io_loop=self.io_loop)
io_loop.add_handler(sock, accept_handler, IOLoop.READ)
accept_handler
callback(connection, address) # self._handle_connection
# ssl
pass
IOStream
future = self.handle_stream(stream, address)
tornado.httpserver.HTTPServer.handle_stream
context = _HTTPRequestContext
conn = HTTP1ServerConnection
self._connections.add(conn)
conn.start_serving(self)
HTTP1ServerConnection._server_request_loop
conn = HTTP1Connection
tornado.httpserver.HTTPServer.start_request
delegate = self.request_callback.start_request(server_conn, request_conn) # instance.initialize(*args self=app, **init_kwargs)
@jump: app.start_request(server_conn, request_conn)
ret = yield conn.read_response(delegate=_RoutingDelegate)
conn._read_message
read_until_regex # headers
delegate.headers_received(start_line, headers)
@jump _RoutingDelegate.headers_received
_read_body
_read_fixed_body
delegate.data_received(body)
@jump: _RoutingDelegate.data_received
delegate.on_connection_close()
@jump _RoutingDelegate.on_connection_close
self._clear_callbacks()
self.io_loop.add_future(gen.convert_yielded(future), lambda f: f.result())
app.start_request tornado.routing.Router.start_request _RoutingDelegate(router=self, server_conn, request_conn)
_RoutingDelegate.headers_received self.delegate = self.router.find_handler(request) # handler @jump app.find_handler self.delegate.headers_received
_RoutingDelegate.data_received return self.delegate.data_received(chunk)
app.find_handler @TODO: 太虚化了,next time, 主要应该是中间件处理,找到对应handler并转换到prepare,get…
tornado.web.RequestHandler.
tornado.ioloop.IOLoop.current().start()