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