1. 安装
tornado的官网:http://www.tornadoweb.org/
a) 直接下载安装包
$ curl -L -O https://github.com/facebook/tornado/archive/v3.1.0.tar.gz
$ tar xvzf v3.1.0.tar.gz
$ cd tornado-3.1.0
$ python setup.py build
$ sudo python setup.py install
b) 从github上下载
$ git clone https://github.com/tornadoweb/tornado.git
$ cd tornado
$ python setup.py build
$ sudo python setup.py install
c) 使用pip安装
sudo pip install tornado
测试
安装完成后在python中测试一下,是否安装成功
$ python
Python 2.7.6 (default, Mar 22 2014, 22:59:56)
[GCC 4.8.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import tornado
>>>
现在python已经安装成功
2. Hello Tornado
Demo hello.py
import tornado.httpserver
import tornado.ioloop
import tornado.options
import tornado.web
from tornado.options import define, options
define("port", default=8000, help="run on the given port", type=int)
class IndexHandler(tornado.web.RequestHandler):
def get(self):
greeting = self.get_argument('greeting', 'my friend')
self.write('Hello ' + greeting + ', This is Tornado!')
if __name__ == "__main__":
tornado.options.parse_command_line()
app = tornado.web.Application(handlers=[(r"/", IndexHandler)])
http_server = tornado.httpserver.HTTPServer(app)
http_server.listen(options.port)
tornado.ioloop.IOLoop.instance().start()
逐句解读
import tornado.httpserver
import tornado.ioloop
import tornado.options
import tornado.web
导入了一些Tornado模块
tornado.httpserver — 一个无阻塞HTTP服务器的实现
tornado.ioloop — 核心的I/O循环
tornado.options — 解析终端参数
tornado.web — 包含web框架的大部分主要功能,包含RequestHandler和Application两个重要的类
from tornado.options import define, options
define("port", default=8000, help="run on the given port", type=int)
导入define,optins这两个模块,用于设置从读取参数和设置默认参数
上面的define是添加了一个port参数,默认8000,帮助文档,以及这个参数接收的类型int,我们用它来指定http监听的端口
如果在命令行参数中也有一个port的同名参数,那么这个参数就会成为一个全局tornado.options的一个属性,
如果用户没有使用这个这一参数,就是用define中的默认参数
class IndexHandler(tornado.web.RequestHandler):
def get(self):
greeting = self.get_argument('greeting', 'my friend')
self.write('Hello ' + greeting + ', This is Tornado!')
这是tornado的请求处理函数类,当处理一个请求时,会将这个类实例化,并调取与HTTP请求的方式对应的方法,
本例子是定义了get方法,也就是说这个处理函数将对HTTP的GET请求作出相应,实际上RequestHandler类中定义了处理这些http方法的函数。
RequestHandler.get(*args, **kwargs)
RequestHandler.head(*args, **kwargs)
RequestHandler.post(*args, **kwargs)
RequestHandler.delete(*args, **kwargs)
RequestHandler.patch(*args, **kwargs)
RequestHandler.put(*args, **kwargs)
RequestHandler.options(*args, **kwargs)
greeting = self.get_argument('greeting', 'my friend')
Tornado的RequestHandler类有一系列有用的内建方法,包括getargument,我们在这里从一个查询字符串中取得参数greeting的值。(
如果这个参数没有出现在查询字符串中,Tornado将使用getargument的第二个参数作为默认值。)
self.write('Hello ' + greeting + ', This is Tornado!')
RequestHandler的另一个有用的方法是write,它以一个字符串作为函数的参数,并将其写入到HTTP响应中。
在这里,我们使用请求中greeting参数提供的值插入到greeting中,并写回到响应中。
if __name__ == "__main__":
tornado.options.parse_command_line()
app = tornado.web.Application(handlers=[(r"/", IndexHandler)])
应用运行的入口,解析命令行参数
然后创建了一个Tornado的Application类的实例,并且handlers定义了根路径的路由和处理函数之间的映射
http_server = tornado.httpserver.HTTPServer(app)
http_server.listen(options.port)
tornado.ioloop.IOLoop.instance().start()
从这里开始的代码将会被反复使用:一旦Application对象被创建,我们可以将其传递给Tornado的HTTPServer对象,
然后使用我们在命令行指定的端口进行监听(通过options对象取出。)最后,在程序准备好接收HTTP请求后,我们创建一个Tornado的IOLoop的实例。