Tornado是Django的替代品还是彼此互补?

时间:2011-06-06 04:23:11

标签: django tornado

我有几个关于龙卷风和其他网络框架的问题。

1)龙卷风声称是一个网络服务器(非阻塞的,因此效果很好),所以有些人说它不起django的作用 - 他们说龙卷风不是一个网络框架。

但是,它提供了一个我认为(http://www.tornadoweb.org/documentation#main-modules)的Web框架 - 这样,它似乎取代了django作为Web开发框架。

我的上述理解是否正确?

2)通常,在Nginx之后会设置几个龙卷风。 Tomcat通常也设置在Apache Web服务器之后。我可以说Tornado扮演的是Tomcat与Java Web服务器完全相同的角色吗?如果答案是肯定的,那么Tornado就是一个Web框架。

3)我读了一些文章说使用Tornado和Django,比如http://www.jeremybowers.com/blog/post/3/on-deploying-tornado-web-server-framework/,但我在网上读了一篇文章声称“如果你使用Django,那么你就失去了Tornado的异步”,这是真的吗还是假的? 一个相关的问题,如果Tornado本身就是我在1)中所说的网络框架,为什么人们会费心使用Django? (结果插件?)

有人可以给我101介绍吗?

2 个答案:

答案 0 :(得分:35)

要回答这个问题,

  • 不,龙卷风不是Django的替代品。这是另一种选择。

  • 是的,它们相互补充但不是在同一个过程中(*)

当团队工作量很大和/或需要在SQL数据库上运行时,我会使用Django。

我会将龙卷风用于其他一切。 IE浏览器。个人项目,WebSocket相关应用程序,使用NoSQL后端的应用程序。

(*)不要打扰在龙卷风中运行django或者反过来,除非你真的有强烈要求。

答案 1 :(得分:27)

  1. 根据大多数定义,Tornado是一个Web服务器一个Web框架,但它是一个非常小的框架(与Rails或Django相比)。 Tornado模块松散耦合,因此可以仅使用Web服务器组件(甚至只使用较低级别的IO循环)。与Django相比,Tornado在很多领域都没有那么多的功能。例如,Tornado中没有真正的模型抽象,你必须自己动手。

  2. 当您在Nginx后面运行Tornado应用程序时,那就是您的应用程序正在运行--Nginx只是代理它。我相信Tomcat是一个应用程序服务器,与您的应用程序不同。我不会将Tomcat称为Web框架。

  3. Django不是异步的,因此通常你的应用程序会在使用Django组件时阻止。这可能不是什么大问题,这取决于你正在做什么。 The Tornado devs have stated(大量释义)对于大多数应用程序来说,最大的胜利来自于在等待客户端(即Web浏览器)时没有阻塞。例如,如果你保持快速查询,阻塞数据库并不是什么大问题。

  4. Django和Tornado都有很多优点和缺点,两者都有很多选择 - 它绝对不仅仅是两者之间的选择。这是一个非常快速列表,列出了您可能想要使用Django的原因:

    Django的优点:

    • 它是一个更完整的堆栈(例如管理页面非常容易实现)
    • 它更加成熟(插件,教程等)
    • 记录更好
    • 它的ORM非常好