大家的回答都有点片面,更多的关注web框架成,其实tornado远远不止这些,且听我慢慢到来
1.高性能的网络库,这可以和gevent,twisted,libevent等做对。提供了异步io支持,超时事件处理,在此基础上提供了tcpserver,httpclient,尤其是curlhttpclient在现有http客户端中肯定排第一。可以用来做爬虫,游戏服务器,据我所知业界已有使用tornado作为游戏服务器

2.web框架,这可以和django,flask对。提供了路由,模板等web框架必备组件。与其他区别是tornado是异步的,天然适合长轮训,这也是friendfeed发明tornado的原因,
当前flask也可以支持,但必须借住gevent等

3.较为完备的http服务器,这点可以和nginx,apache对比,但只支持http1.0,所以使用nginx做前段不仅是为了更好利用多核,也是让其支持http1.1

4.完备的wsgi服务器,这可以和gunicore,gevent wsgi server做对比,也就是说可以让flask运行在tornado之上,让tornado加速flask
5.提供了完备的websocket支持,这让html5的游戏等提供了便利。像知乎长轮训就是使用了websocket,但websocket手机支持的不是很好,前段时间不得不使用定时ajax发送大量请求,期待手机浏览器赶快奋起直追

tornado,你值得拥有

ornado自带了一个web服务器,性能不错,但由于实现简化了很多功能,建议跑在nginx后面

tornado本身又是一个web框架,但是没有预先实现很多功能,只保留比较必要的组件,这个和Django就有点相反的思路。
虽然思路相反,但Django其实也是围绕着一个设计精良的core来实现的,如果单独把这个core抽取出来其实和Tornado的规模和功能都差不多。它的功能丰富(甚至是复杂)只不过是一种“一站式框架”的理念的体现而已。
简单来说,就是它们一个是简约框架,一个是把可能需要的组件都默认配给你的框架。喜欢用哪个看个人爱好。前者的麻烦是遇到某些问题要自己重新实现,后者的麻烦是如果它预置给你的不能满足要求也要自己重新实现,归根到底就是找到一个平衡点,尽量方便开发就可以了。

异步方面个人不推荐node.js,js用在服务端还是很少的,很多组件都不齐全,要成熟还得比较久,用Python可以有很多现有的组件使用。

最后,如果关心性能,请尝试pypy,在Linux下网络IO方面毫不逊色node.js,不过大部分情况下性能问题都不在Python写的东西中,而在数据库

1. 轻框架,从web.py开始,flask,bottle这些都是轻框架,tornado则是轻框架的代表
2. 高性能异步框架,直接基于ioloop写东西,你就觉得tornado不仅仅是web框架了
3. 队列服务器,我们实现一个两级tornado服务器模型,前面的负责web分配和并发,后面负责单线程高cpu计算,轻松解决了单线程高运算量的block问题

WSGI功能可以忽略不计了

理解了tornado的特性之后,我们发现唯一需要和tornado配合的就是nginx,既可以做负载均衡,又可以挡住静态文件请求。除此以外你还需要个mysql,试试torndb。

使用tornado可以大大的减少web系统中使用的组件数量,用最少的代码量和极其精简的架构实现你的系统。

作者:KJ(Kan Jia)
链接:https://www.zhihu.com/question/20136991/answer/34851536
来源:知乎
著作权归作者所有,转载请联系作者获得授权。

作者:郭煜
链接:https://www.zhihu.com/question/20136991/answer/19226877
来源:知乎
著作权归作者所有,转载请联系作者获得授权。

作者:罗伊
链接:https://www.zhihu.com/question/20136991/answer/34676413
来源:知乎
著作权归作者所有,转载请联系作者获得授权。

tornado远远不止的更多相关文章

  1. 全栈式JavaScript

    如今,在创建一个Web应用的过程中,你需要做出许多架构方面的决策.当然,你会希望做的每一个决定都是正确的:你想要使用能够快速开发的技术,支持持续的迭代,最高的工作效率,迅速,健壮性强.你想要精益求精并 ...

  2. 为什么选择Django?

    Web开发是Python语言应用领域的重要部分,也是工作岗位比较多的领域.如果你对基于Python的Web开发有兴趣,正打算开始学习使用Python做Web开发,或者已经是一个Web开发者有工作需要, ...

  3. Django学习笔记(1)——初识Django

    一:Web框架介绍 框架,即framework,特指为解决一个开放性问题而设计的具有一定约束性的支撑结构,使用框架可以快速帮你开发特定的系统. Web框架是别人已经设定好的一个web网站模板,你学习它 ...

  4. Python常用的标准库以及第三方库有哪些?

    20个必不可少的Python库也是基本的第三方库 读者您好.今天我将介绍20个属于我常用工具的Python库,我相信你看完之后也会觉得离不开它们.他们是: Requests.Kenneth Reitz ...

  5. 20个必不可少的Python库也是基本的第三方库

    个属于我常用工具的Python库,我相信你看完之后也会觉得离不开它们.他们是: Requests.Kenneth Reitz写的最富盛名的http库.每个Python程序员都应该有它. Scrapy. ...

  6. Python常用的标准库以及第三方库

    Python常用的标准库以及第三方库有哪些?   20个必不可少的Python库也是基本的第三方库 读者您好.今天我将介绍20个属于我常用工具的Python库,我相信你看完之后也会觉得离不开它们.他们 ...

  7. 150行代码搭建异步非阻塞Web框架

    最近看Tornado源码给了我不少启发,心血来潮决定自己试着只用python标准库来实现一个异步非阻塞web框架.花了点时间感觉还可以,一百多行的代码已经可以撑起一个极简框架了. 一.准备工作 需要的 ...

  8. Python的常用库

    读者您好.今天我将介绍20个属于我常用工具的Python库,我相信你看完之后也会觉得离不开它们.他们是: Requests.Kenneth Reitz写的最富盛名的http库.每个Python程序员都 ...

  9. 16 . PythonWeb框架之Django

    Web框架简介 Web开发是Python语言应用领域的重要部分,也是目前最主要的Web开发语言之一,在其二十多年的历史中出现了数十种Web框架,比如Django.Tornado.Flask.Twist ...

随机推荐

  1. 在Excel中创建和使用ServerDocument

    ServerDocument是微软提供的一种读取Word或Excel文档级应用中CachedData的工具.本示例将向你展示如何使用用ServerDocument. 1.      创建文档级应用 打 ...

  2. myeclipse开发代码颜色搭配保护视力

    废话不多说,这个东西主要是为了保护视力的,另外我也挺喜欢上边的颜色搭配的,今天特拿出来分享.直接上图

  3. LabVIEW系列——合并错误(VI)的用法

    Merge Errors.vi的功能:1.按顺序搜索错误输入1,2,3,以及错误数组输入中的错误,输出第一个错误.                        2.如果没有错误,也就是错误状态都为F ...

  4. 关于XCode5打开工程闪退的一种解决方案

    今天同事遇到一个问题,是关于xcode5打开工程文件一直闪退的问题.后来查看了一下崩溃日志.有如下描述: xception Type: EXC_CRASH (SIGABRT) Exception Co ...

  5. iis6配置使用页面Gzip压缩提速

    iis7默认就启用了Gzip压缩,节约带宽,流量,能够很明显的提升访问速度,但是iis6则没有,本文就是介绍如何通过配置开启iis6的Gzip压缩 一. HTTP压缩概述 HTTP压缩是在Web服务器 ...

  6. iOS UIKit:CollectionView之布局(2)

    Collection view使用UICollectionViewFlowLayout对象来管理section中的cell,该对象是一种流布局方式,即在collection view中的section ...

  7. ubuntu 14.04/15.10 安装基于eclipse的android app开发环境

    一开始是装了ubuntu15.10,不知道是我的x200机器太old还是iso镜像有问题,总是各种莫名的引导不起来.有时候刚刚装好的干净系统,只install了一个vim和openssh,重启,然后就 ...

  8. Windows系统下搭建Jenkins环境

    1. 安装JDK JDK下载地址:  http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.ht ...

  9. compareTo()

    从字面意思可知这个方法就是比较的意思. 所以该方法有如下两种情况: 1.比较前后的两个字符不相同: (1)     String str = "Hello World"; Stri ...

  10. memcache分布式实现、memcache分布…

    Memcache的分布式介绍 memcached虽然称为"分布式"缓存服务器,但服务器端并没有"分布式"功能.服务器端仅包括内存存储功能,其实现非常简单.至于m ...