"使用Node.js进行直接响应" - 使用不同的Node.js进程发送HTTP响应(与主进程不同)

Ale*_*lls 6 javascript http multiprocessing node.js express

使用Node.js服务器,我想知道它是否可能并且建议从委派的工作进程而不是主进程发送HTTP响应.这些工作进程可以是Node.js服务器本身,也可以是通过IPC进行通信的Node.js子进程.

我不认为集群核心模块https://nodejs.org/api/cluster.html可以做我想做的事情,因为在该模型中,所有工作人员都在监听同一个端口,并且他们处理所有请求代表主进程.我正在寻找的是一个响应所有HTTP请求的主要Node.js进程,可能是进行身份验证并处理某些请求,但也能够将数据密集型或CPU密集型请求委派给工作池.

想象一下,我们有大量数据的GET请求,比如说2-3MB.

我们至少有三种可能的情况:

  1. 主进程接收请求,向数据库询问大量数据,然后将数据发送回请求者.
  2. 主进程接收请求,使用IPC将一些数据发送到工作进程,工作者从DB获取数据做一些繁重的操作,然后工作者使用IPC将所有3MB数据发送回主进程,然后发送回响应.
  3. 主进程接收请求,将关于请求流的尽可能少的信息发送给工作者,工作者完成所有工作,工作人员发回HTTP响应.

我对使#3成为可能感到特别好奇.

方案3的简单描述如下:

在此输入图像描述

(为了清楚起见,我不希望一个请求有3个响应,我只是想表明一个工作者可能代表主进程发送响应).

任何人都知道这可能与Node.js一起使用吗?如何在其他语言中使用?通常我对Node.js并发模型没有任何问题,但是对于某些类型的数据,使用Cluster模块可能不是实现最高并发级别的最佳方法.

我相信这个模型的一个术语是"直接响应",这意味着工作者直接响应请求.也许可以简单地使用集群核心模块https://nodejs.org/api/cluster.html.

Bra*_*rad 0

我想知道是否可以并且建议从委托工作进程发送 HTTP 响应

是的,这是可能的,而且可能是扩展应用程序服务器的最简单、最常见的方法。与 IPC 不同,它可以通过网络跨主机工作。(如果你愿意的话,它也可以在本地工作......但请确保你的应用程序实际上是受 CPU 限制的。尽管 JavaScript 本身是单线程的,但大多数 IO 库和一些 NPM 模块都使用线程池。 )

没有理由使用 Node.js 作为后端服务器之间的服务器负载平衡。Node.js 更适合您的应用程序服务器。对于仅代理 HTTP 请求的东西,我会使用 Nginx 或类似的。Nginx 可以高效地处理所有与客户端的事务,并且可以轻松配置负载均衡。