【发布时间】:2011-04-06 05:06:40
【问题描述】:
除了 node.js 是用 JS 编写的,Tornado 是用 Python 编写的,两者之间有什么区别?它们都是非阻塞异步 Web 服务器,对吧?除了语言之外,为什么还要选择一个?
【问题讨论】:
标签: javascript python comparison node.js tornado
除了 node.js 是用 JS 编写的,Tornado 是用 Python 编写的,两者之间有什么区别?它们都是非阻塞异步 Web 服务器,对吧?除了语言之外,为什么还要选择一个?
【问题讨论】:
标签: javascript python comparison node.js tornado
node.js 的主要优点是它的所有库都是异步的,因此您不必担心阻塞。有mysql、postgres、redis等的异步库,默认都是异步的。
Python 有一个可以处理任何东西的库——但这些库中的大多数都不是异步的。为了利用龙卷风(而不是阻止进程),需要特殊库(例如,您不能只使用“pip install redis”并使用它,您需要类似brukva),并且有龙卷风库比 node.js 库少得多。例如,目前没有可用的异步 mysql tornado 驱动程序(或者至少我不知道)。
但是您仍然可以在 tornado 中使用许多 python 库(不执行 i/o 的库),并且 tornado 社区正在提高和填补这些空白。
根据我的经验,使用 node.js 编写应用程序比使用 tornado 更容易。我个人从 node.js 切换到 tornado,因为它更适合我的 python 项目的现有基础架构(提供 html 页面的 django 站点和提供实时功能的 tornado 服务器之间的集成非常轻松)。
【讨论】:
正如 Rich Bradshaw 指出的,Node.js 是用 JS 编写的,这意味着您可以保持前端和后端使用相同的语言,并且可能共享一些代码库。对我来说,这是 Node.js 的巨大潜在优势。 Node 似乎还提供了更多开箱即用的异步库。
V8 应该使 JS 比 Python at least that's what benchmarks seem to suggest 更快,但这可能并不重要,因为 Node.js 和 Tornado (以及大多数其他网络框架)问题)使用本地库的包装器。许多 Python 标准库是用 C 编写的,或者可以用更快的替代方案代替,从而进一步减少潜在差异。
Web 服务通常受 I/O 限制,这意味着我们将时间花在等待数据存储上而不是处理数据上。这使得 JS 和 Python 之间的合成速度差异在许多应用程序中无关紧要。
【讨论】:
node.js 使用 V8 编译成汇编代码,tornado 还没有这样做。
除此之外(这实际上似乎对速度没有太大影响),这是生态系统。你更喜欢 JS 的事件模型,还是 Python 的工作方式?你更喜欢使用 Python 或 JS 库吗?
【讨论】:
Nodejs 还具有称为 Socket.io 的 websocket 的无缝集成/实现。它处理支持套接字的浏览器 - 事件,并且还具有对旧浏览器的向后轮询兼容性。它在需要通知框架或一些类似的基于事件的编程的开发中非常快。
【讨论】:
如果对 python 没有个人偏好,我建议你使用 NodeJS。我非常喜欢 Python,但是对于异步,我选择 Tornado 而不是节点,后来不得不努力寻找做某事的方法,或者支持异步的库(比如 Cassandra 在测试中具有异步,但我无法找到使用 cqlengine 的方法async. 不得不选择 Mongo,因为我已经超过了最后期限)。 在性能和异步方面,Node 远胜于 tornado。
【讨论】: