在nodejs中,子进程(fork)可以与父进程具有相同的上下文。我想基本上将当前进程沙盒化为另一个当前进程...如果子进程中存在错误,它只会关闭子进程并且父进程仍在运行。
答案 0 :(得分:0)
听起来您想使用群集API。这不完全是你所描述的,但非常接近。实际上,您运行的应用程序的多个子实例可能会独立失败。
答案 1 :(得分:0)
这是我直观的理解,Nodejs实际上并没有严格意义上的fork(),它“生成”,执行者,另一个实例是IPC机制连接的子进程。为什么要经历这一切?可能对于跨平台的一致性,因为Windows没有真正的分叉。是的,我知道在Unix下“spawn”是一个fork()然后是exec()。
因此,同一个进程将自己作为一个子进程,通过IPC机制连接,并根据您是主(原始进程)还是子进程(worker)进行分支。这是集群API。它实际上是一个非常巧妙,简单和直接的解决方案。
这只是猜测。如果我错了,有人可以纠正我。
群集API将在孩子死亡时通知主人,您可以重新启动以重新启动孩子。但是,由于这不是真正的fork,因此您不会在子进程中继承文件句柄,我认为这就是您想要的。
现在,如果需要,您可以为节点编写自己的C ++模块。这很简单,你可以做一个真正的fork()。事实上,我必须这样做,因为我需要一个集群UDP服务器,当时我对Nodejs的原始理解似乎表明你不能这样做。使用真正的fork以某种特殊的方式混淆节点,对我来说,DNS功能无法正常工作,但这是我遇到的唯一问题。我认为所有的子叉都使用相同的UDP套接字进行DNS解析,并且针对一个工作人员的DNS请求响应有时会被另一个工作人员吃掉。
如果您对这种方法感兴趣,我可以为您提供代码。