-------------------简介-------------------
1、概念:
Tornado全称Tornado Web Server,是一个用Python语言写成的Web服务器兼Web应用框架,由FriendFeed公司在自己的网站FriendFeed中使用,被Facebook收购以后框架在2009年9月以开源软件形式开放给大众。
2、特点:
1、作为Web框架,是一个轻量级的Web框架,类似于另一个Python web框架Web.py,其拥有异步非阻塞IO的处理方式。
2、作为Web服务器,Tornado有较为出色的抗负载能力,官方用nginx反向代理的方式部署Tornado和其它Python web应用框架进行对比,结果最大浏览量超过第二名近40%。
3、性能:
1、Tornado有着优异的性能。它试图解决C10k问题,即处理大于或等于一万的并发
2、Tornado框架和服务器一起组成一个WSGI的全栈替代品。单独在WSGI容器中也可以使用
3、tornado网络框架或者tornaod http服务器,有一定的局限性,为了最大化的利用
-------------------Tornado与Django的区别-------------------
1、Tornado
1、Tornado走的是少而精的方向,注重的是性能优越,它最出名的是异步非阻塞的设计方式。
2、特点:
1、HTTP服务器:Tornado框架和服务器一起组成一个WSGI的全栈替代品
2、异步编程
3、WebSockets
2、Django
1、Django是走大而全的方向,注重的是高效开发,它最出名的是其全自动化的管理后台:只需要使用起ORM,做简单的对象定义,它就能自动生成数据库结构、以及全功能的管理后台。
2、Django提供的方便,也意味着Django内置的ORM跟框架内的其他模块耦合程度高,应用程序必须使用Django内置的ORM,否则就不能享受到框架内提供的种种基于其ORM的便利。
3、特点:
1、session功能
2、后台管理
3、ORM
-------------------Tornado安装
1、查看工作环境中是否安装
$ pip list
2、安装对应的tornado环境
1、自动安装
$ pip install tornado
2、手动安装
1、下载安装包tornado-4.3.tar.gz(https://pypi.python.org/packages/source/t/tornado/tornado-4.3.tar.gz)
2、$ tar xvzf tornado-4.3.tar.gz
3、$ cd tornado-4.3
4、$ python setup.py build
5、$ sudo python setup.py install
3、安装对应的数据库操作环境
$ pip install trondb
-------------------Tornado基本模块
1、Tornado web 程序编写思路
1、创建web应用实例对象,第一个初始化参数为路由映射列表。
2、定义实现路由映射列表中的handler类。
3、创建服务器实例,绑定服务器端口。
4、启动当前线程的IOLoop。
2、tornado.web
1、RequestHandler:
封装了对应一个请求的所有信息和方法,write(响应信息)就是写响应信息的一个方法;对应每一种http请求方式(get、post等),把对应的处理逻辑写进同名的成员方法中(如对应get请求方式,就将对应的处理逻辑写在get()方法中),当没有对应请求方式的成员方法时,会返回“405: Method Not Allowed”错误。
2、Application:
Tornado Web框架的核心应用类,是与服务器对接的接口,里面保存了路由信息表,其初始化接收的第一个参数就是一个路由信息映射元组的列表;其listen(端口)方法用来创建一个http服务器实例,并绑定到给定端口(注意:此时服务器并未开启监听)。
3、tornado.ioloop
1、tornado的核心io循环模块,封装了Linux的epoll和BSD的kqueue,tornado高性能的基石
2、Linux的epoll原理图
3、IOLoop.current():
返回当前线程的IOLoop实例。
4、IOLoop.start():
启动IOLoop实例的I/O循环,同时服务器监听被打开。
4、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()
5、tornado.options
1、tornado.options模块——全局参数定义、存储、转换。
2、tornado.options.define()
1、def define(name, default=None, type=None, help=None, metavar=None,
multiple=False, group=None, callback=None):
2、name 选项变量名,须保证全局唯一性,否则会报“Option 'xxx' already defined in ...”的错误;
3、default 选项变量的默认值,如不传默认为None;
4、type 选项变量的类型,从命令行或配置文件导入参数的时候tornado会根据这个类型转换输入的值,转换不成功时会报错,可以是str、float、int、datetime、timedelta中的某个,若未设置则根据default的值自动推断,若default也未设置,那么不再进行转换。可以通过利用设置type类型字段来过滤不正确的输入。
5、multiple 选项变量的值是否可以为多个,布尔类型,默认值为False,如果multiple为True,那么设置选项变量时值与值之间用英文逗号分隔,而选项变量则是一个list列表(若默认值和输入均未设置,则为空列表[])。
6、help 选项变量的帮助提示信息,在命令行启动tornado时,通过加入命令行参数 --help 可以查看所有选项变量的信息(注意,代码中需要加入tornado.options.parse_command_line())。
3、tornado.options.options
全局的options对象,所有定义的选项变量都会作为该对象的属性。
4、tornado.options.parse_command_line()
1、进行对应的初始化
5、tornado.options.parse_config_file(path)
6、实例
#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()
- python运维开发(二十二)---JSONP、瀑布流、组合搜索、多级评论、tornado框架简介
内容目录: JSONP应用 瀑布流布局 组合搜索 多级评论 tornado框架简介 JSONP应用 由于浏览器存在同源策略机制,同源策略阻止从一个源加载的文档或脚本获取或设置另一个源加载的文档的属性. ...
- Tornado框架简介(二)
--------------------Application-------------------- 1.settings 1.debug=True:,设置tornado是否工作在调试模式, ...
- Django框架简介,wsgiref 与 jinja2 模块
目录 框架简介 wsgiref模块 jinja2 模块 框架简介 Django是一个web开发框架,用来开发web应用,本质就是, web框架+socket服务端 MVC框架和MTV框架 MVC,全名 ...
- wsgiref模块、web框架、django框架简介
"""web框架:将前端.数据库整合到一起的基于互联网传输的python代码 web框架也可以简单的理解为是软件开发架构里面的'服务端'""" ...
- 手动搭建简易web框架与django框架简介
目录 纯手写简易web框架 基于wsgiref模块 动静态网页 简单了解jinja2模块 框架请求流程 python主流web框架 django框架 简介 应用app 命令操作django pycha ...
- Spring 系列: Spring 框架简介 -7个部分
Spring 系列: Spring 框架简介 Spring AOP 和 IOC 容器入门 在这由三部分组成的介绍 Spring 框架的系列文章的第一期中,将开始学习如何用 Spring 技术构建轻量级 ...
- 《HiWind企业快速开发框架实战》(0)目录及框架简介
<HiWind企业快速开发框架实战>(0)目录及框架简介 本系列主要介绍一款企业管理系统快速开发框架,该框架旨在快速完成企业管理系统,并实现易维护可移植的目标. 使用逐个系统模块进行编码的 ...
- Yaf零基础学习总结1-Yaf框架简介
从今天开始,给大家讲解下yaf框架,讲解之前肯定要了解下yaf是个什么东西,当然,从标题我们已经知道yaf是个PHP框架了,也许大家对于PHP框架并不陌生,一般PHP程序员用过的框架至少有一两个吧,国 ...
- hdwiki 框架简介
虽然HDwiki是一个开源的wiki系统,并且代码简洁易懂,但如果想在系统上做做进一步开发还需要对框架有一个整体的认识.熟悉了HDwiki的框架以后完全可以独立出来做其他功能的开发,当做一个开源的PH ...
随机推荐
- showcase,开发中必须引起重视的小环节
有人说,测试者来自火星,开发者来自金星.这是因为软件测试员和软件开发者就好比一对冤家,里面的缘由说不清也道不明.开发代表着创造,而测试则代表着摧毁,因为测试的目的就是以各种方式不断地从开发出的产品中发 ...
- Web测试与APP测试有哪些异同?
1.相同点 不管是传统行业的web测试,还是新兴的手机APP测试,都离不开测试的基础知识,即是不管怎么变,测试的原理依然会融入在这两者当中. 1)设计测试用例时,依然都是依据边界值分析法.等价类划分等 ...
- C#委托基础学习
什么是委托 委托,顾名思义就是在你忙着做另一件事时候,你要去做另一件事,于是你可能就会委托别人帮你做,让别人把结果返回给你.编程时,委托也有这个思想. 我目前对委托的看法是,在编程中,委托 ...
- vue.js移动端app实战2:首页
貌似有部分人要求写的更详细,这里多写一点vuel-cli基础的配置 什么是vue-cli? 官方的解释是:A simple CLI for scaffolding Vue.js projects, 简 ...
- VPS安装中文语言
在CentOS VPS下修改语言编码: localedef -c -f UTF-8 -i zh_CN zh_CN.utf8 export LC_ALL=zh_CN.utf8 上面第一步是用来产生编码文 ...
- ue4 C++ 编程 通过三个点的位置算出夹角
const FVector2D& Pt1 = 第一个点的位置; const FVector2D& Pt2 = 第二个点的位置; float EdgeRadians1 = FMath:: ...
- mybatis 详解(六)------通过mapper接口加载映射文件
通过 mapper 接口加载映射文件,这对于后面 ssm三大框架 的整合是非常重要的.那么什么是通过 mapper 接口加载映射文件呢? 我们首先看以前的做法,在全局配置文件 mybatis-conf ...
- web项目中图标的前端处理方案
工程中用到图标是常事,那这些图标我们前端一般是怎么解决的呢?这几种方案有什么优缺点呢? 第一种: SVG Sprite SVG sprite其实就是svg的集合.SVG即可缩放矢量图形 (Scalab ...
- Java String字符串深入详解
Java中字符串对象创建有两种形式,一种为字面量形式,如String str = "hello";,另一种就是使用new这种标准的构造对象的方法,如String str = new ...
- 使用postgre数据库实现树形结构表的子-父级迭代查询,通过级联菜单简单举例
前言:开发常用的关系型数据库MySQL,mssql,postgre,Oracle,简单的增删改查的SQL语句都与标准SQL兼容,这个不用讲,那么对于迭代查询(不严格的叫法:递归查询)每种数据库都不一样 ...