node.js和Tornado之间的区别

除了node.js是用Python和Tornado编写的,这两者之间有什么区别呢? 他们都是非阻塞asynchronousWeb服务器,对不对? 为什么select除了语言之外呢?

node.js的主要优点是它的所有库都是asynchronous的,所以你不必担心阻塞。 有mysql,postgres,redis等asynchronous库。默认情况下,所有的都是asynchronous的。

Python有一个任何东西的库 – 但大多数这些库不是asynchronous的。 为了利用龙卷风(而不是阻止进程)特殊的库是必要的(例如,你不能只是'点安装redis'和使用它,你需要像布鲁克瓦那样 ),而且less得多龙卷风库比node.js库。 目前没有async mysql龙卷风驱动程序可用,例如(或者至less我没有意识到)。

但是你仍然可以使用很多带龙卷风的python库(那些不能做I / O的),龙卷风社区正在提高和填补空白。

根据我的经验,使用node.js编写应用比使用龙卷风更容易。 我个人从node.js切换到龙卷风,因为它更好地适合我的python项目的现有基础设施(django网站提供html页面和提供实时function的龙卷风服务器之间的集成是相当痛苦的)。

正如Rich Bradshaw所指出的, Node.js是用JS编写的,这意味着您可以保持前端和后端使用相同的语言,并可能共享一些代码库。 对我来说这是Node.js的巨大潜在好处。 看起来节点还附带有更多的asynchronous库。

V8应该使得JS比Python更快,至less这是基准testing的结果 ,但它可能并不重要,因为Node.jsTornado (以及大多数其他Web框架)都使用包装器来处理本机库。 很多Python标准库都是用C语言编写的,或者可以用一个更快的替代方法替代,这样可以减less潜在的差异。

Web服务通常是I / O绑定的,这意味着我们花时间等待数据存储而不处理数据。 这使得JS和Python之间的合成速度差异在许多应用程序中是不相关的。

node.js使用编译成汇编代码的V8,龙卷风不会这样做。

除此之外(这实际上并没有对速度产生太大的影响),这就是生态系统。 你更喜欢JS的事件模型还是Python的工作方式? 你使用Python或JS库更快乐吗?

我会build议你去与NodeJS,如果没有个人pref python。 我非常喜欢Python,但是对于asynchronous,我select了Tornado over节点,后来不得不努力find方法去做一件事情,或者使用asynchronous支持的库(比如Cassandra在testing中有asynchronous,但是在哪里找不到方法来使用cqlengineasynchronous。因为我已经超过了最后期限,所以必须selectMongo)。 在性能和asynchronous方面,Node比龙卷风好得多。

Nodejs也有一个称为Socket.io的websockets的无缝集成/实现。 它处理支持套接字的浏览器 – 事件,并且对于旧浏览器也具有反向轮询兼容性。 开发需要一个通知框架或者一些类似的基于事件的编程。