Tornado是一款由Python編寫(xiě)的,相對(duì)簡(jiǎn)單的非阻塞式Web服務(wù)器。和現(xiàn)在的主流Web服務(wù)器框架(包括大多數(shù) Python 的框架)有著明顯的區(qū)別:它是非阻塞式服務(wù)器舵稠,而且速度相當(dāng)快。Tornado每秒可以處理數(shù)以千計(jì)的連接,因此Tornado是實(shí)時(shí)Web服務(wù)的一個(gè)理想框架喧务。使用tornado可以構(gòu)建高性能的web應(yīng)用,例如facebook的社交服務(wù)friendfeed枉圃。
Tornado框架包含以下模塊:
?web - FriendFeed使用的基礎(chǔ)Web框架功茴,包含了Tornado的大多數(shù)重要的功能
?escape - XHTML, JSON, URL的編碼/解碼方法
?database - 對(duì)MySQLdb的簡(jiǎn)單封裝,使其更容易使用
?template - 基于Python的web模板系統(tǒng)
?httpclient - 非阻塞式HTTP客戶(hù)端孽亲,它被設(shè)計(jì)用來(lái)和web及httpserver協(xié)同工作
?auth - 第三方認(rèn)證的實(shí)現(xiàn)(包括Google OpenID/OAuth坎穿、Facebook Platform、Yahoo BBAuth返劲、FriendFeed OpenID/OAuth玲昧、Twitter OAuth)
?locale - 針對(duì)本地化和翻譯的支持
?options - 命令行和配置文件解析工具,針對(duì)服務(wù)器環(huán)境做了優(yōu)化
?httpserver - 服務(wù)于web模塊的一個(gè)非常簡(jiǎn)單的HTTP服務(wù)器的實(shí)現(xiàn)
?iostream - 對(duì)非阻塞式的socket的簡(jiǎn)單封裝篮绿,以方便常用讀寫(xiě)操作
?ioloop - 核心的 I/O 循環(huán)
這里推薦一篇關(guān)于tornado源碼分析的好文
http://kenby.iteye.com/blog/1159621
tornado孵延、PycURL以及 simplejson的安裝:
https://pypi.python.org/pypi/tornado/4.4.2#downloads
下載tornado-4.4.2.tar.gz
https://pypi.python.org/pypi/simplejson/#downloads
下載simplejson-3.10.0.tar.gz
2)安裝tornado
tar -xvzf tornado-4.4.2.tar.gz
cd tornado-4.4.2
python setup.py build
sudo python setup.py install
3)安裝 PycURL 以及 simplejson
sudo easy_install setuptools pycurl
tar -xvzf simplejson-3.10.0.tar.gz
cd simplejson-3.10.0
python setup.py build
sudo python setup.py install
安裝完后測(cè)試一下:
$ python
Python 2.7.10 (default, Oct 23 2015, 18:05:06)
[GCC 4.2.1 Compatible Apple LLVM 7.0.0 (clang-700.0.59.5)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import tornado
>>>
一個(gè)簡(jiǎn)單的tornado的例子:
# -*- coding: utf-8 -*-
import tornado.httpserver#一個(gè)無(wú)阻塞HTTP服務(wù)器的實(shí)現(xiàn)
import tornado.ioloop#核心的I/O循環(huán)
import tornado.options#解析終端參數(shù)
import tornado.web#包含web框架的大部分主要功能,包含RequestHandler和Application兩個(gè)重要的類(lèi)
#導(dǎo)入define亲配,optins這兩個(gè)模塊尘应,用于設(shè)置從讀取參數(shù)和設(shè)置默認(rèn)參數(shù)
from tornado.options import define,options
#define是添加了一個(gè)port參數(shù),默認(rèn)8000弃榨,幫助文檔菩收,以及這個(gè)參數(shù)接收的類(lèi)型int,用它來(lái)指定http監(jiān)聽(tīng)的端口
define("port",default=8000,help="run on the given port",type=int)
#tornado的請(qǐng)求處理函數(shù)類(lèi)鲸睛,當(dāng)處理一個(gè)請(qǐng)求時(shí)娜饵,會(huì)將這個(gè)類(lèi)實(shí)例化,并調(diào)取與HTTP請(qǐng)求的方式對(duì)應(yīng)的方法官辈,這個(gè)處理函數(shù)將對(duì)HTTP的GET請(qǐng)求作出相應(yīng)
class IndexHandler(tornado.web.RequestHandler):
def get(self):
#以一個(gè)字符串作為函數(shù)的參數(shù)箱舞,并將其寫(xiě)入到HTTP響應(yīng)中
self.write('Hello , This is Tornado!')
if __name__=="__main__":
#應(yīng)用運(yùn)行的入口遍坟,解析命令行參數(shù)
tornado.options.parse_command_line()
#創(chuàng)建了一個(gè)Tornado的Application類(lèi)的實(shí)例,并且handlers定義了根路徑的路由和處理函數(shù)之間的映射
app=tornado.web.Application(handlers=[(r"/",IndexHandler)])
#一旦Application對(duì)象被創(chuàng)建晴股,將其傳遞給Tornado的HTTPServer對(duì)象愿伴,然后使用指定的端口進(jìn)行監(jiān)聽(tīng)(通過(guò)options對(duì)象取出。)
#最后电湘,在程序準(zhǔn)備好接收HTTP請(qǐng)求后隔节,創(chuàng)建一個(gè)Tornado的IOLoop的實(shí)例
http_server=tornado.httpserver.HTTPServer(app)
http_server.listen(options.port)
tornado.ioloop.IOLoop.instance().start()
命令行運(yùn)行: python hello.py
$ python hello.py
[I 170327 11:30:13 web:1971] 200 GET / (127.0.0.1) 2.26ms
在瀏覽器輸入地址http://localhost:8000
屏幕上會(huì)輸出:
Hello , This is Tornado!
附:
tornado框架Github源碼--https://github.com/tornadoweb/tornado