gpt4 book ai didi

node.js - 如何获取对模块中先前 fork 进程的引用?

转载 作者:太空宇宙 更新时间:2023-11-04 00:29:25 25 4
gpt4 key购买 nike

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

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

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

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 的 documentation关于这个和通常的 Google-fu,但我没有想出解决方案。

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

最佳答案

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

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

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

关于node.js - 如何获取对模块中先前 fork 进程的引用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41557336/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com