首页 文章

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

提问于
浏览
6

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

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

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

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

  • 主进程接收请求,向数据库询问大量数据,然后将数据发送回请求者 .

  • 主进程接收请求,使用IPC将一些数据发送到工作进程,工作者从数据库获取数据做一些繁重的操作,然后工作者使用IPC将所有3MB数据发送回主进程,然后发回响应 .

  • 主进程接收请求,将关于请求流的尽可能少的信息发送给工作者,工作人员完成所有工作,工作人员发回HTTP响应 .

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

方案3的简单描述如下:

enter image description here

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

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

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

2 回答

  • 0

    我想知道是否有可能并建议从委派的工作进程发送HTTP响应

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

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

  • 0

    如果您尝试在您的机器中使用多个处理器(执行Node本身只使用一个进程),只需使用PM2:

    https://www.npmjs.com/package/pm2

    PM2在您指定给PM2的处理器上启动应用程序的各种实例 . 如果您的应用程序是无状态的(因为它理想情况下使用Node),您的应用程序的实例将在每个处理器上运行,PM2将执行路由 .

    如果我可以口头重新绘制您为方案3发布的图表,PM2将取代“MAIN”,“W”将替换为您的应用程序,无需担心 Worker 和分叉 .

    我们在 生产环境 中使用PM2,它对我们来说效果很好 .

相关问题