Tornado框架简介

-------------------简介-------------------
一、概念:
    Tornado全称Tornado Web Server,是一个用Python语言写成的Web服务器兼Web应用框架,由FriendFeed公司在本身的网站FriendFeed中使用,被Facebook收购之后框架在2009年9月以开源软件形式开放给大众。
 
二、特色:
    一、做为Web框架,是一个轻量级的Web框架,相似于另外一个Python web框架Web.py,其拥有异步非阻塞IO的处理方式。
 
    二、做为Web服务器,Tornado有较为出色的抗负载能力,官方用nginx反向代理的方式部署Tornado和其它Python web应用框架进行对比,结果最大浏览量超过第二名近40%。
 
三、性能:
    一、Tornado有着优异的性能。它试图解决C10k问题,即处理大于或等于一万的并发
 
    二、Tornado框架和服务器一块儿组成一个WSGI的全栈替代品。单独在WSGI容器中也能够使用
 
    三、tornado网络框架或者tornaod http服务器,有必定的局限性,为了最大化的利用
 
 
-------------------Tornado与Django的区别-------------------
一、Tornado
    一、Tornado走的是少而精的方向,注重的是性能优越,它最出名的是异步非阻塞的设计方式。
 
    二、特色:
        一、HTTP服务器:Tornado框架和服务器一块儿组成一个WSGI的全栈替代品
 
        二、异步编程
 
        三、WebSockets
 
二、Django
    一、Django是走大而全的方向,注重的是高效开发,它最出名的是其全自动化的管理后台:只须要使用起ORM,作简单的对象定义,它就能自动生成数据库结构、以及全功能的管理后台。
 
    二、Django提供的方便,也意味着Django内置的ORM跟框架内的其余模块耦合程度高,应用程序必须使用Django内置的ORM,不然就不能享受到框架内提供的种种基于其ORM的便利。
 
    三、特色:
        一、session功能
 
        二、后台管理
 
        三、ORM
 
 
-------------------Tornado安装
一、查看工做环境中是否安装
    $ pip list
 
二、安装对应的tornado环境
    一、自动安装
        $ pip install tornado
 
    二、手动安装
        一、下载安装包tornado-4.3.tar.gz(https://pypi.python.org/packages/source/t/tornado/tornado-4.3.tar.gz)
 
        二、$ tar xvzf tornado-4.3.tar.gz
 
        三、$ cd tornado-4.3
 
        四、$ python setup.py build
 
        五、$ sudo python setup.py install
 
三、安装对应的数据库操做环境
    $ pip install trondb
 
 
-------------------Tornado基本模块
一、Tornado web 程序编写思路
    一、建立web应用实例对象,第一个初始化参数为路由映射列表。
 
    二、定义实现路由映射列表中的handler类。
 
    三、建立服务器实例,绑定服务器端口。
 
    四、启动当前线程的IOLoop。
 
二、tornado.web
    一、RequestHandler:
        封装了对应一个请求的全部信息和方法,write(响应信息)就是写响应信息的一个方法;对应每一种http请求方式(get、post等),把对应的处理逻辑写进同名的成员方法中(如对应get请求方式,就将对应的处理逻辑写在get()方法中),当没有对应请求方式的成员方法时,会返回“405: Method Not Allowed”错误。
 
    二、Application:
        Tornado Web框架的核心应用类,是与服务器对接的接口,里面保存了路由信息表,其初始化接收的第一个参数就是一个路由信息映射元组的列表;其listen(端口)方法用来建立一个http服务器实例,并绑定到给定端口(注意:此时服务器并未开启监听)。
 
三、tornado.ioloop
    一、tornado的核心io循环模块,封装了Linux的epoll和BSD的kqueue,tornado高性能的基石
 
    二、Linux的epoll原理图
 
    三、IOLoop.current():
        返回当前线程的IOLoop实例。
 
    四、IOLoop.start():
        启动IOLoop实例的I/O循环,同时服务器监听被打开。
 
四、tornado.httpserver
    实例:
        #coding:utf-8
        #一个简单的Tornado web
 
        #引用对应的Tornado包
        from tornado.web import Application,RequestHandler
        from tornado.ioloop import IOLoop
        from tornado.httpserver import HTTPServer
 
        class IndexHandler(RequestHandler):
 
            def get(self):
 
                self.write('hello word!')
 
        if __name__ == '__main__':
            #建立一个app应用
            app = Application([('/',IndexHandler)])
 
            #app.listen('8000')
            #为应用建立一个http服务
            http_server = HTTPServer(app)
 
            #绑定对应的端口号
            http_server.listen(8000)
 
            #开启多个tornado进程
            #http_server.bind(8000)
            #http_server.start(4)
 
            IOLoop.current().start()
 
五、tornado.options
    一、tornado.options模块——全局参数定义、存储、转换。
 
    二、tornado.options.define()
        一、def define(name, default=None, type=None, help=None, metavar=None,
           multiple=False, group=None, callback=None):
 
        二、name 选项变量名,须保证全局惟一性,不然会报“Option 'xxx' already defined in ...”的错误;
 
        三、default 选项变量的默认值,如不传默认为None;
 
        四、type 选项变量的类型,从命令行或配置文件导入参数的时候tornado会根据这个类型转换输入的值,转换不成功时会报错,能够是str、float、int、datetime、timedelta中的某个,若未设置则根据default的值自动推断,若default也未设置,那么再也不进行转换。能够经过利用设置type类型字段来过滤不正确的输入。
 
        五、multiple 选项变量的值是否能够为多个,布尔类型,默认值为False,若是multiple为True,那么设置选项变量时值与值之间用英文逗号分隔,而选项变量则是一个list列表(若默认值和输入均未设置,则为空列表[])。
 
        六、help 选项变量的帮助提示信息,在命令行启动tornado时,经过加入命令行参数 --help 能够查看全部选项变量的信息(注意,代码中须要加入tornado.options.parse_command_line())。
 
    三、tornado.options.options
        全局的options对象,全部定义的选项变量都会做为该对象的属性。
 
    四、tornado.options.parse_command_line()
        一、进行对应的初始化
 
    五、tornado.options.parse_config_file(path)
 
    六、实例
      #coding:utf-8
      #一个简单的Tornado web
 
      #引用对应的Tornado包
      from tornado.web import Application,RequestHandler
      from tornado.ioloop import IOLoop
      from tornado.httpserver import HTTPServer
      import tornado.options
 
 
      tornado.options.define("port",type=int,help="端口号")
 
      class IndexHandler(RequestHandler):
 
          def get(self):
 
              self.write('hello word!')
 
      if __name__ == '__main__':
          tornado.options.parse_command_line()
 
 
          #建立一个app应用
          app = Application([('/',IndexHandler)])
 
          #app.listen('8000')
          #为应用建立一个http服务
          http_server = HTTPServer(app)
 
          #绑定对应的端口号
          http_server.listen(tornado.options.options.port)
 
          #开启多个tornado进程
          #http_server.bind(8000)
          #http_server.start(4)
 
          IOLoop.current().start()
相关文章
相关标签/搜索