Tornado - QLGQ/learning-python GitHub Wiki

Introduction

Tornado是一种Web服务器软件的开源版本。Tornado和现在的主流Web服务框架(包括大多数Python的框架)有着明显的区别:它是非阻塞式服务器,而且速度相当快。

得利于其非阻塞的方式和对epoll的运用,Tornado每秒可以处理数以千记的连接,因此Tornado是实时Web服务的一个理想框架。

Tornado是使用Python编写的一个强大的、可扩展的Web服务器。它在处理严峻的网络流量时表现得足够强健,但却在创建和编写时有着足够的轻量级,并能够被用在大量的应用和工具中。

快速入手

安装

  1. sudo pip install tornado
  2. 源码安装: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
    • 第三步:服务器接受请求,并交由对应的类处理该请求
    • 第四步:类接收到请求之后,根据请求方式的不同调用并执行相应的方法
    • 第五步:方法返回值的字符串内容发送浏览器

References

Tornado框架
Introduction to Tornado