Tornado - QLGQ/learning-python GitHub Wiki
Introduction
Tornado是一种Web服务器软件的开源版本。Tornado和现在的主流Web服务框架(包括大多数Python的框架)有着明显的区别:它是非阻塞式服务器,而且速度相当快。
得利于其非阻塞的方式和对epoll的运用,Tornado每秒可以处理数以千记的连接,因此Tornado是实时Web服务的一个理想框架。
Tornado是使用Python编写的一个强大的、可扩展的Web服务器。它在处理严峻的网络流量时表现得足够强健,但却在创建和编写时有着足够的轻量级,并能够被用在大量的应用和工具中。
快速入手
安装
sudo pip install tornado
- 源码安装:https://pypi.python.org/packages/source/t/tornado/tornado-4.3.tar.gz
DEMO
#!/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") # 可以返回字符串
# self.render("s1.html") # 这个可以返回html
# self.redirect("www.baidu.com") # 跳转到某个url
# class LoginHandler(tornado.web.RequestHandler):
#
# def get(self, *args, **kwargs):
# # self.write("Hello, world") # 可以返回字符串
# self.render('login.html', state="") # 返回HTML页面
# # self.render('index.html', k1='123') # 这个可以返回html
# # self.redirect("www.baidu.com") # 跳转到某个url
#
# def post(self, *args, **kwagrs):
# user = self.get_argument('username')
# pwd = self.get_argument('password')
# if user == 'alex' and pwd == '123':
# self.redirect("http://www.baidu.com") # 跳转百度的url
# else:
# self.write("登录失败,请重新输入") # 返回字符串
settings = {
'template_path': 'views'
}
applicaiton = tornado.web.Application([
# (r"/login", LoginHandler),
(r"/index", MainHandler),
], **settings)
if __name__ == "__main__":
application.listen(8888)
tornado.ioloop.IOLoop.instance().start()
基本上所有的Web框架都是以下的流程(以Tornado为例):
-
准备阶段:
- 加载配置文件
- 加载路由映射 application = tornado.web.Application([(r"/index", MainHandler),])
- 创建socket
-
循环阶段:
类似socket Server不断的循环监听文件句柄,当有请求过来的时候,根据用户的请求方法来判断是什么请求,再通过反射来执行相应的函数或类。 -
流程:
- 第一步:执行脚本,监听 8888 端口
- 第二步:浏览器客户端访问/index --> http://127.0.0.1:8888/index
- 第三步:服务器接受请求,并交由对应的类处理该请求
- 第四步:类接收到请求之后,根据请求方式的不同调用并执行相应的方法
- 第五步:方法返回值的字符串内容发送浏览器