Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 如何获取对模块中以前分叉的进程的引用?_Node.js - Fatal编程技术网

Node.js 如何获取对模块中以前分叉的进程的引用?

Node.js 如何获取对模块中以前分叉的进程的引用?,node.js,Node.js,我在一个节点服务器上运行了一个JS模块,它生成了一个进程来处理这样的情况:我们将信息存储在一个文件中,希望发送给另一个服务,但该服务当前已关闭,我想偶尔ping一下,看看它是否已备份 其他开发人员使用此模块捕获信息以发送到日志服务,他们可能会从自己的应用程序多次调用该模块。因此,模块需要了解该流程是否已经生成 我遇到的问题是,当该进程已经生成时,我不确定如何获取对它的引用 Parent.js(不是为了简洁而粘贴整个内容) var cp=require('child_process'); 观察者

我在一个节点服务器上运行了一个JS模块,它生成了一个进程来处理这样的情况:我们将信息存储在一个文件中,希望发送给另一个服务,但该服务当前已关闭,我想偶尔ping一下,看看它是否已备份

其他开发人员使用此模块捕获信息以发送到日志服务,他们可能会从自己的应用程序多次调用该模块。因此,模块需要了解该流程是否已经生成

我遇到的问题是,当该进程已经生成时,我不确定如何获取对它的引用

Parent.js(不是为了简洁而粘贴整个内容)

var cp=require('child_process');
观察者;
如果(!性别歧视){
dbWatcher=cp.fork(uu dirname+'/dbWatcher.js',[],{execArgv:['--debug=5859']});
}否则{
dbWatcher.send(消息);
}
当加载此模块且进程确实存在时,dbWatcher将明显未定义,从而导致错误。如何获取对现有流程对象的引用,例如执行
cp.fork()
时分配的对象

我试着浏览一下这个节点和通常的Google fu,但我没有找到解决方案


更新:可以通过在第一次运行期间将返回的对象分配给全局对象来解决此问题。然而,出于某种原因,Node似乎应该提供一种更干净的方法。

我相当确定,保留对流程引用的唯一方法是,如果它是从您自己的应用程序派生的(或者至少在同一个操作系统实例上,您必须执行一些非常时髦的进程附加操作-我不知道这是可能的,但即使是:ew!)。在这里,您最好使用
child.pid
引用子进程id并将其存储在某处

你应该考虑的另一个问题是,如果你的应用程序运行在多个位置,你会做什么?你需要一个单一的真实来源,它可以告诉任何正在运行的应用程序进程是否已经运行或是否需要执行。


我会认真考虑将此过程重新构建为一个独立的微服务,在一个地方运行一次。构建一些简单的API,以响应其状态,并允许您在需要时初始化或重新启动该过程。这里的好处是,您现在可以将其作为一个模块发布给所有开发人员,并保证'将是唯一的真相来源。

感谢您的快速响应!似乎如果Node允许应用程序生成一个子应用程序,并在父应用程序被杀死时让它运行,那么如果我保留了进程ID,它应该有办法在以后获得相同的引用对象。如果不是这样的话,那就很不幸了!重建为micro很有趣进程。该进程运行在一个特定的环境中,我们希望在一个给定的物理服务器上运行多个节点服务器,并且每个实例都可以使用一个派生的观察进程。如果您可以存储子进程的pid,我想只需枚举系统进程并检查该pid即可,然后将其存储到其他位置在这里,其他开发人员可以找到pid?但您无法重新连接到它。这样做的风险是,虽然统计概率很小,但在子进程被杀死后,其他一些系统进程可能会使用与子进程相同的pid执行。这一切看起来都非常粗糙,将来可能会给您带来很多痛苦为了在花费的时间上获得一点短期收益。是的,我发布了一个关于这个问题的更新,其中有一个解决方案。正如你在这篇最新评论中提到的,基本上感觉很粗糙。如果Node有一个可靠的、大概经过测试的检索该对象的方法,我会觉得舒服得多。