如何在模块中获取对先前分叉进程的引用?

时间:2017-01-09 21:32:48

标签: node.js

我有一个在Node服务器上运行的JS模块,它生成一个进程来处理我们将信息存储在我们想要发送到另一个服务的文件中的情况,但该服务目前已关闭,我偶尔会想要ping它以查看它是否已备份。

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

我遇到的问题是,当该过程已经产生时,我不知道如何获得它的引用。

Parent.js(为简洁而不粘贴整件事)

x

当加载此模块并且进程 时,dbWatcher将显然未定义,从而导致错误。如何获取对现有流程对象的引用,例如我(32, 32, 3)时分配的对象?

我尝试通过Node documentation查看这个以及通常的Google-fu,但我没有想出解决方案。

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

1 个答案:

答案 0 :(得分:1)

我很确定保留对该进程的引用的唯一方法是,它是从您自己的应用程序生成的(或者至少在同一个OS实例上,您必须在其中执行一些非常时髦的过程附加 - 我不知道这是可能的,但即使它是:ew!)。你可以在这里做的最好是使用child.pid来引用子进程ID并将其存储在某个地方。

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

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