Node.js nodejs是否可以让子进程(fork)与父进程具有相同的上下文

Node.js nodejs是否可以让子进程(fork)与父进程具有相同的上下文,node.js,Node.js,在nodejs中,是否可以使子进程Work与父进程具有相同的上下文。我希望基本上将当前进程沙箱化到另一个当前进程中…如果子进程中有错误,它只会关闭子进程,而父进程仍在运行 听起来您想使用集群API。这不完全是你所描述的,但非常接近。本质上,您有多个应用程序的子实例在运行,这些子实例可能会独立失败 我的直觉理解是,Nodejs实际上并不是严格意义上的fork,它产生、执行另一个实例,作为一个由IPC机制连接的子进程。为什么要经历这一切?可能是为了跨平台的一致性,因为Windows没有真正的分叉。是

在nodejs中,是否可以使子进程Work与父进程具有相同的上下文。我希望基本上将当前进程沙箱化到另一个当前进程中…如果子进程中有错误,它只会关闭子进程,而父进程仍在运行

听起来您想使用集群API。这不完全是你所描述的,但非常接近。本质上,您有多个应用程序的子实例在运行,这些子实例可能会独立失败

我的直觉理解是,Nodejs实际上并不是严格意义上的fork,它产生、执行另一个实例,作为一个由IPC机制连接的子进程。为什么要经历这一切?可能是为了跨平台的一致性,因为Windows没有真正的分叉。是的,我知道在Unix下,spawn是fork,然后是exec

因此,同一进程作为子进程执行自身,通过IPC机制连接,并在代码中根据您是原始主进程还是子工作进程进行分支。这是集群API。这实际上是一个非常巧妙、简单和直接的解决方案

那只是猜测。如果我错了,有人可以纠正我

当一个子节点死亡时,集群API将通知主机,您可以重新工作以重新启动该子节点。但是,由于这不是一个真正的fork,所以您不会在子进程中继承文件句柄,我认为这是您想要的

现在,如果你想,你可以为节点写你自己的C++模块。这很简单,你可以做一个真正的叉子。事实上,我必须这么做,因为我需要一个集群式UDP服务器,而我当时对NodeJ的原始理解似乎表明你无法做到这一点。使用真正的fork会以一些特殊的方式混淆节点,对我来说,DNS函数不会正常工作,但这是我唯一的问题。我认为所有的子fork都使用相同的UDP套接字进行DNS解析,一个用于一个工作者的DNS请求响应有时会被另一个工作者吃掉

如果您对这种方法感兴趣,我可以为您提供代码