javascript - 不懂Node.js架构

标签 javascript python node.js

<分区>

我们正在考虑将 node.js 作为网络平台。但我有一个关键问题,因为我想我不了解 node.js 的架构:

  1. 看起来默认情况下您被迫使用他们的自定义 HTTP 服务器,没有 WSGI 或任何东西?!

  2. 看起来当在响应中进行一些“真正的计算”时(不仅仅是一些 I/O),所有的基础设施都被搞砸了,ab -n ... -c ... 与例如相比,每个请求返回大量时间Python——Pyramid/Flask 或其他什么?!

  3. 所以,node.js 的作者假设我们只做 I/O 或者我错过了一些非常基本的东西?

最佳答案

  1. 您自相矛盾:“默认”和“强制”不兼容。您可以使用任何您想要的 HTTP 库。核心 http 模块可能被认为是“默认”模块,但没有什么能阻止您使用另一个模块。

  2. JavaScript 是一种单线程语言,而 Node.js 是一种 JavaScript 运行时,而不是像许多其他语言一样生成一个线程响应的 Web 服务器。如果你愿意,你仍然可以为每个响应做一个线程,并且有一些构建在 Node 之上的项目可以做到这一点,但是你失去了 Node 的大部分好处。如果您正在响应 Web 请求执行计算量大的操作(并且您的客户愿意等待您这样做),您应该通过许多可用解决方案(Web Worker、线程-a-go-go、child_process 等)。

  3. Node.js 的作者假定您正在编写 Web 服务器。您在网络服务器中所做的大部分事情本质上都是 IO,无论该 IO 涉及文件系统、数据库,还是用于在其他工作室进程上排队计算密集型任务的消息总线。

查看您的问题,如果您试图将 Node.js 与 Python 和 WSGI 集成,那么您似乎对什么是 Node.js 有一个基本的误解。 Node.js 用于编写 Web 服务器,因此尝试使用它……与 Python 一起使用?在 Python 里面? (我真的不确定你想要完成什么)没有意义。

如果您的任务不仅受 I/O 限制,您可能不应该将这些任务托管在与 Web 服务器相同的机器上。因此,在 3 中简要提到了消息总线方法。但是,如果您决心这样做,并且确定这些任务不会占用所有 CPU,那么您应该确定这些任务普遍存在的频率。如果它们出现在每个 Web 请求中,则不应使用 Node.js;你正在放弃它最基本的优势,只留下次要的优势(比如围绕它发展起来的生态系统)。如果它们很少见,那么您应该通过 2 中可用的许多方法将它们分离到单独的线程中。

相关:https://gist.github.com/2794861

关于javascript - 不懂Node.js架构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10769162/

相关文章:

javascript - Google Cloud Functions 与客户实时通信

python - 为什么 `None is None is None` 返回 True?

javascript - Node MySQL - 发送前编辑响应

node.js - 如何创建带有memberCount 的机器人状态?

javascript - htmlWebPack 插件 publicPath 没有按预期工作

javascript - 基础复选框值错误

javascript - 导入html的外部部分

python - 如何使用 python 成像库创建位图

python - Python 中的 3n+1 编程挑战

node.js - 在 vs 代码中调试在 typescript Node 中编写的 jasmine 测试