Tornado
不仅仅是一个WEB框架,也可以是一个WEB服务器。
在
Tornado
中我们可以使用
wsgi
模块下的
WSGIContainer
类运行其他
WSGI
应用如:
Fask
,
Bottle
,
Django
。
首先我们写一个最小的
Flask
应用
# hello.py
from flask import Flask
app = Flask(__name__)
@app.route("/")
def hello():
return "Hello World!"
编写
Tornado
服务器
# run.py
from tornado.wsgi import WSGIContainer
from tornado.httpserver import HTTPServer
from tornado.ioloop import IOLoop
from hello import app
http_server = HTTPServer(WSGIContainer(app))
http_server.listen(8008)
IOLoop.instance().start()
我们创建了一个
HTTP
服务器实例
http_server
,因为服务器要服务于我们刚刚创建的WEB应用,将接收到的客户端请求通过WEB应用中的路由映射表引导到对应的
handler
中,所以在构建
http_server
对象的时候需要传入WEB应用对象
app
。可以使用自身的WEB框架,如果使用托管的应用,将要托管的应用以参数的形式传入到
WSGIContainer
类中。
我们定义这个服务器监听的端口为
8008
IOLoop
是
Tornado
的核心
I/O
循环调度模块,也是
tornado
高性能的基石,封装了Linux的
epoll
和BSD的
kqueue
,用于处理
socket
相关的连接、响应、异步读写等网络事件。每个
Tornado
进程都会初始化一个全局唯一的
IOLoop
实例,在IOLoop中通过静态方式
instance()
进行封装,获取
IOLoop
实例直接调用此方法即可启动
IOLoop
实例,即启动事件循环机制,配合非阻塞的
HTTP Server
工作。
如果是
tornado.ioloop.IOLoop.current().start()
语句,
IOLoop.current()
返回当前线程的
IOLoop
实例。
IOLoop.start()
启动
IOLoop
实例的
I/O
循环,同时服务器监听被打开
完成之后直接允许即可
python run.py