【发布时间】:2016-06-14 09:15:21
【问题描述】:
使用 Node.js 服务器,我想知道是否可以并建议从委派的工作进程而不是主进程发送 HTTP 响应。这些工作进程可能是 Node.js 服务器本身,或者只是通过 IPC 通信的 Node.js 子进程。
我不认为集群核心模块https://nodejs.org/api/cluster.html可以做我想做的事情,因为在那个模型中,所有的worker都在监听同一个端口,他们代表master进程处理所有的请求。我正在寻找的是一个响应所有 HTTP 请求的主要 Node.js 进程,可能进行身份验证并处理一些请求,但也能够将数据密集型或 CPU 密集型请求委托给工作池。
假设我们有一个对大量数据的 GET 请求,比如 2-3MB。
我们至少有 3 种可能的情况:
- 主进程接收请求,向数据库请求大量数据,然后将数据发送回请求者。
- 主进程收到请求,使用IPC向worker进程发送一些数据,worker从DB获取数据做一些繁重的操作,然后worker使用IPC将3MB的数据全部发送回主进程进程,然后发回响应。
- 主进程接收请求,向工作人员发送尽可能少的有关请求流的信息,工作人员完成所有工作,工作人员发回 HTTP 响应。
我对使#3 成为可能感到特别好奇。
场景 3 的简单描述如下:
(为了清楚起见,我不希望一个请求有 3 个响应,我只是想表明一个工作人员可以代表主进程发送响应)。
有人知道这如何与 Node.js 一起工作吗?它如何在其他语言中工作?通常我对 Node.js 并发模型没有任何问题,但是对于某些类型的数据,使用 Cluster 模块可能不是实现最高并发级别的最佳方式。
我相信这个模型的一个术语是“直接响应”,意思是工作人员直接响应请求。也许可以简单地使用集群核心模块https://nodejs.org/api/cluster.html。
【问题讨论】:
-
不久前我有一些类似的想法,但经过广泛搜索后,我最终使用 nginx 作为负载均衡器,这看起来就像您试图通过此实现的目标,但没有启动整个应用程序。如果有人有任何解决方案,我也很想知道。
-
当然,谢谢,我认为 cluster.setupMaster 可能能够做我想做的事,但我还不确定,请参阅:nodejs.org/api/…
-
例如,在此处查看接受的答案:stackoverflow.com/questions/23771516/…
标签: javascript node.js http express multiprocessing