English 中文(简体)
我不明白 Node.js 建筑结构[已关闭]
原标题:I don t understand the Node.js architecture [closed]

我们正在考虑将node.js 作为一个网络平台。但我有一个关键问题,因为我认为我不明白 node.js 的结构:

  1. 默认情况下您不得不使用自定义的 HTTP 服务器, 没有 WSGI 或其它东西吗?

  2. 当在回应中做一些“真实计算”(不仅仅是一些 I/O)时, 所有基础设施都被打乱了, 并且ab -n... -c... 与 Python- Pyramid/Flask 或其它东西相比, 每一份请求的返回次数会很大?

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

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

  2. JavaScript 是一种单行语言, 而Node.js 是一个 JavaScript 运行时间, 而不是一个像其他许多用户一样生成线条响应的网络服务器。 您仍然可以按每个响应做线条, 在节点上建起一些项目可以这样做, 但是您失去了节点的大部分好处。 如果您正在对网络请求进行计算- 重件( 您有客户愿意等待您这样做 ), 您应该通过众多可用解决方案之一( 网络工人、 线条- a-go-go、 儿童进程等) 旋转一条单独的线 。

  3. 诺德. js 的作者假设您正在撰写一个网络服务器。 您在网络服务器上所做的大部分工作基本上都是 IO, 无论是 IO 包含文件系统、 数据库, 还是信息总线, 用于排队计算密集型任务 。

审视你的问题,你似乎对Node.js是什么有基本误解, 如果你试图把它与 Python 和 WSGI. Node.js 整合起来, 是为了写网络服务器, 所以试图使用它... 和 Python 一起? 在 Python 内部? (我不知道你到底想做什么) 没有什么意义。

如果您的任务不仅仅是 I/O 约束, 您也许不应该在与您的网络服务器相同的框中主持这些任务。 因此, 3 中简要提及的信息总线处理方法 。 但是, 如果您决心这样做, 并且确定这些任务会占用所有 CPU, 您应该确定这些任务有多频繁。 如果这些任务在网络上都要求, 您不应该使用 Node. js; 您正在放弃它最基本的优势, 留下的只是次要的( 如周围生长的生态系统 ) 。 如果它们很罕见, 那么您应该通过2 中的许多方法把它们分开, 并用不同的线条把它们旋转出来 。

相关:

问题回答

如果您是一个以 Python 为基础的商店, 您也可以考虑 < a href=" http:// twistmatrix. com" rel = “ nofollow” > Twisted , 这是一个以 Python 书写的由事件驱动的框架 。 Twisted 也可以将屏蔽工作拖长到线上 。

最重要的是,你首先定义你需要什么,你的问题是什么。不要仅仅因为每个人都在谈论这个而跳上新的花哨。看看你的需要,并使用能解决它们的东西。

我看到有一个节点.js模块,以WSGI为模式:Strata

此外,您还可以向儿童进程卸载密集计算: