您的位置:首页 > 其它

tornado的简单介绍和示例

2015-10-09 18:07 330 查看
一、Tornado简介

Tornado 是 FriendFeed 使用的可扩展的非阻塞式 web 服务器及其相关工具的开源版本。这个 Web 框架看起来有些像 web.py 或者 Google 的 webapp,不过为了能有效利用非阻塞式服务器环境,这个 Web 框架还包含了一些相关的有用工具 和优化。

Tornado 和现在的主流 Web 服务器框架(包括大多数 Python 的框架)有着明显的区别:它是非阻塞式服务器,而且速度相当快。得利于其非阻塞的方式和对 epoll 的运用,Tornado 每秒可以处理数以千计的连接,这意味着对于实时 Web 服务来说,Tornado 是一个理想的 Web 框架。我们开发这个 Web 服务器的主要目的就是为了处理 FriendFeed 的实时功能 ——在 FriendFeed 的应用里每一个活动用户都会保持着一个服务器连接。(关于如何扩容 服务器,以处理数以千计的客户端的连接的问题,请参阅 C10K problem。)

二、hello world示例

Tornado的hello word是怎么来的?示例如下:

#! /usr/bin/env python
#coding=utf-8

import tornado.ioloop
import tornado.web

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

application = tornado.web.Application([
(r"/", MainHandler),
])

if __name__ == "__main__":
application.listen(8888)
tornado.ioloop.IOLoop.instance().start()


运行后,使用浏览器访问IP:8888端口,即可出现hello word

浏览器打开 “http://ip:8888” 的时候,发出 “GET”请求,请求根目录”/”,

根据tornado.web.Application中参数列表中元组对(r’/’,MainHandler),于是找到MainHandler类,这个类继承了tornado.web.RequestHandler类,但是它里面没有定义get和post方法(具体可以看源码),所以在MainHandler类中定义。

Tornado框架自身实现了一个HTTP Server,因此不需要额外的Web Server,只需要运行Python脚本即可启动整个应用。

在Tornado框架中,一个URI对应一个RequestHandler,每一个Handler负责处理该URI的HTTP请求,GET、 POST、HEAD等HTTP方法对应Handler的get()、post()、head()等方法,HTTP请求的处理逻辑在相应的方法内实现。!!! Handler可以看做是Tornado框架里的Controller。

RequestHandler的write()方法,将字符串写入Response;render()方法将模板文件写入Response。

三、HelloWorld的进一步扩充

#! /usr/bin/env python
#encoding:utf8

import tornado.ioloop
import tornado.web
import tornado.options
import tornado.httpserver

from tornado.options import define, options

define ('port', default=8000, help='run on the given port', type=int)

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

def main():
tornado.options.parse_command_line()
app=tornado.web.Application(
handlers=[
(r'/', MainHandler)
]
)
http_server=tornado.httpserver.HTTPServer(app)
http_server.listen(options.port)
tornado.ioloop.IOLoop.instance().start()

if __name__ == '__main__':
main()


define()函数为脚本扩展命令行参数。

port参数是自定义的启动参数,其它参数均为框架自带的默认启动参数。

参考http://www.ltesting.net/ceshi/ceshijishu/xncs/2012/1009/205591.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  tornado