如何获得一个模块中以前分叉进程的引用?

我有一个JS模块运行在一个节点服务器上,产生一个进程来处理我们有信息存储在一个文件,我们要发送到另一个服务,但该服务目前下来的情况下,我想偶尔ping它看看它是否备份。

其他开发人员使用此模块捕获要发送到日志logging服务的信息,并且可能会从自己的应用程序多次调用该模块。 所以,模块需要了解这个过程是否已经产生。

我遇到的问题是,当这个过程已经产生,我不知道如何得到它的参考。

Parent.js(为了简洁不粘贴整个事情)

var cp = require( 'child_process' ); var dbWatcher; if ( !processDoesExist ) { dbWatcher = cp.fork( __dirname + '/dbWatcher.js', [], {execArgv: ['--debug=5859']} ); } else { dbWatcher.send( message ); } 

当这个模块被加载并且过程确实存在的时候,dbWatcher显然是不确定的,会导致错误。 如何获得对现有过程对象的引用,例如在执行cp.fork()时分配的对象?

我尝试通过Node的文档和通常的Google-Fu来查看,但是我没有提出解决scheme。

更新 :可以通过在第一次运行期间将返回的对象分配给全局对象来解决这个问题。 但是,Node确实看起来应该提供一个更干净的方式,出于某种原因。

我相当肯定,保留引用的唯一方法是如果它是从你自己的应用程序(或至less在同一个操作系统实例,你必须做一些严重的时髦的过程附加 – 我不知道这是可能的,但即使是这样:ew!)。 最好你可以在这里做的是使用child.pid引用subprocessID和存储的地方。

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

我认真考虑将这个过程重新构build成一个独立的微服务,一次运行一次。 构build一些响应其状态的简单API,并允许您在需要时初始化或重新启动该过程。 这样做的好处是你现在可以把它作为一个模块推送给你的所有开发人员,并保证它将成为单一的事实来源。