欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Tornado启动流程分析

程序员文章站 2022-07-15 12:14:03
...


我们先来看一下所有地方都会出现的Hello World的例子:

import tornado.ioloop
import tornado.web

class MainHandler(tornado.web.RequestHandler):
    def get(self):
        self.write("Hello, world")

def make_app():
    return tornado.web.Application([
        (r"/", MainHandler),
    ])

if __name__ == "__main__":
    app = make_app()
    app.listen(8888)
    tornado.ioloop.IOLoop.current().start()

从上边的例子可以看出,tornado显示定义了一个Application, 在Application定义了不同的URI的路由,例子中给出的URI的路由就是r"/",对应处理类就是MainHandler,他们被放在同一个tuple里形成了关联。Application接受一个列表,因此可以在这边定义多个全局路由对应不同的处理方式。

之后让这个Application去监听8888端口。这边其实隐藏了不少细节,Application的listen方法其实是对HTTPServer的lisnten进行了一个封装,而HTTPServer又是调用TCPServer的listen方法监听的端口。

我们都知道一般服务器的工作流程:首先按照socket->bind->listen顺序创建listen socket监听客户端,然后当socket中有数据过来的时候,再处理这部分数据。

这个流程就跟上边的listen对上了, 只不过框架帮我们隐藏了很多细节。在监听完端口之后,就会运行一个IOLoop的单例实例,然后服务器就正式开始运行了。当然中间其实有很多其他的步骤,比如注册socket到IOLoop, IOLoop的while大循环处理数据等。之后可以再详细研究,贴一个从网上找到的一个启动的基本流程图

Tornado启动流程分析




相关标签: tornado