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,你值得拥有
tornado本身又是一个web框架,但是没有预先实现很多功能,只保留比较必要的组件,这个和Django就有点相反的思路。
虽然思路相反,但Django其实也是围绕着一个设计精良的core来实现的,如果单独把这个core抽取出来其实和Tornado的规模和功能都差不多。它的功能丰富(甚至是复杂)只不过是一种“一站式框架”的理念的体现而已。
简单来说,就是它们一个是简约框架,一个是把可能需要的组件都默认配给你的框架。喜欢用哪个看个人爱好。前者的麻烦是遇到某些问题要自己重新实现,后者的麻烦是如果它预置给你的不能满足要求也要自己重新实现,归根到底就是找到一个平衡点,尽量方便开发就可以了。
异步方面个人不推荐node.js,js用在服务端还是很少的,很多组件都不齐全,要成熟还得比较久,用Python可以有很多现有的组件使用。
最后,如果关心性能,请尝试pypy,在Linux下网络IO方面毫不逊色node.js,不过大部分情况下性能问题都不在Python写的东西中,而在数据库
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远远不止的更多相关文章
- 全栈式JavaScript
如今,在创建一个Web应用的过程中,你需要做出许多架构方面的决策.当然,你会希望做的每一个决定都是正确的:你想要使用能够快速开发的技术,支持持续的迭代,最高的工作效率,迅速,健壮性强.你想要精益求精并 ...
- 为什么选择Django?
Web开发是Python语言应用领域的重要部分,也是工作岗位比较多的领域.如果你对基于Python的Web开发有兴趣,正打算开始学习使用Python做Web开发,或者已经是一个Web开发者有工作需要, ...
- Django学习笔记(1)——初识Django
一:Web框架介绍 框架,即framework,特指为解决一个开放性问题而设计的具有一定约束性的支撑结构,使用框架可以快速帮你开发特定的系统. Web框架是别人已经设定好的一个web网站模板,你学习它 ...
- Python常用的标准库以及第三方库有哪些?
20个必不可少的Python库也是基本的第三方库 读者您好.今天我将介绍20个属于我常用工具的Python库,我相信你看完之后也会觉得离不开它们.他们是: Requests.Kenneth Reitz ...
- 20个必不可少的Python库也是基本的第三方库
个属于我常用工具的Python库,我相信你看完之后也会觉得离不开它们.他们是: Requests.Kenneth Reitz写的最富盛名的http库.每个Python程序员都应该有它. Scrapy. ...
- Python常用的标准库以及第三方库
Python常用的标准库以及第三方库有哪些? 20个必不可少的Python库也是基本的第三方库 读者您好.今天我将介绍20个属于我常用工具的Python库,我相信你看完之后也会觉得离不开它们.他们 ...
- 150行代码搭建异步非阻塞Web框架
最近看Tornado源码给了我不少启发,心血来潮决定自己试着只用python标准库来实现一个异步非阻塞web框架.花了点时间感觉还可以,一百多行的代码已经可以撑起一个极简框架了. 一.准备工作 需要的 ...
- Python的常用库
读者您好.今天我将介绍20个属于我常用工具的Python库,我相信你看完之后也会觉得离不开它们.他们是: Requests.Kenneth Reitz写的最富盛名的http库.每个Python程序员都 ...
- 16 . PythonWeb框架之Django
Web框架简介 Web开发是Python语言应用领域的重要部分,也是目前最主要的Web开发语言之一,在其二十多年的历史中出现了数十种Web框架,比如Django.Tornado.Flask.Twist ...
随机推荐
- 模仿微信"转你妹"游戏
<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...
- 03 将MDB文件在DATAGRID中显示
附件:http://files.cnblogs.com/xe2011/MDB_BindingSource.rar using System; using System.Collections.Gene ...
- RichtextBox去除闪烁光标
http://files.cnblogs.com/xe2011/CustomRichTextBox_HideCaret.rar richTextBox能高亮选择,光标仍在,没有光标闪烁 把重RichT ...
- linux route命令学习
route命令用于显示和操作IP路由表. 没有增加路由之前,route命令的结果如下, sh-# route Kernel IP routing table Destination Gatew ...
- 用apache的httpclient发请求和接受数据
此处发请求的是用httpclient4,请自己下载所需要的jar包. 发post请求,并得到数据. String url = "http://localhost:8080/lee" ...
- ASP.NET Web API(二):安全验证之使用HTTP基本认证
在前一篇文章ASP.NET Web API(一):使用初探,GET和POST数据中,我们初步接触了微软的REST API: Web API. 我们在接触了Web API的后就立马发现了有安全验证的需求 ...
- build/core/config.mk
# 如果定义了ANDROID_BUILD_SHELL,则ANDROID_BUILD_SHELL # 否则使用默认的/bin/bash ifdef ANDROID_BUILD_SHELL SHELL : ...
- Unty3D动态加载图片
试验动态加载图片,代码如下: using UnityEngine; using System.Collections; public class DynamicLoad : MonoBehaviour ...
- Base64原理简介
Base64是一种编码方式,通常用于将二进制数据转换成可见字符的形式,该过程可逆. 过程大致如下: 1. 对64个可见字符,进行一个索引编码.索引是二进制的值,对应找到一个可见字符. Base64 编 ...
- 两种隐藏元素方式【display: none】和【visibility: hidden】的区别
此随笔的灵感来源于上周的一个面试,在谈到隐藏元素的时候,面试官突然问我[display: none]和[visibility: hidden]的区别,我当时一愣,这俩有区别吗,好像有,但是忘记了啊,因 ...