Nodejs 发现 Nodejs 的其他实例

Nodejs discover other instances of Nodejs

Nodejs 进程可以在其运行时轻松生成并与子 nodejs 进程通信。但是,有什么方法可以让 Nodejs 进程了解其他由其他来源生成的 非子 Nodejs 进程并与之通信?

我想 检测 其他实例的解决方案可能涉及 运行 ps 命令和过滤结果:

let proc = require('child_process').spawn('ps', [], {
  cwd: __dirname,
  env: process.env
});

(async () => {
  let chunks = [];
  proc.on('data', chunk => chunks.push(chunk.toString('utf8')));
  await new Promise(r => proc.on('exit', r));
  let results = chunks.join('');

  // TODO: Now process the String `results`, searching for lines
  // which seem to describe a Nodejs process. Capture the pids of
  // these lines
})();

与以这种方式发现的 pid 通信可能是一个完全不同的过程。

这个问题能解决吗?是否有执行此操作的现有库?这可以通过跨平台的方式完成吗?

默认情况下,所有 node.js 应用程序都没有通用的、可检测的签名。因此,如果不对这些 node.js 应用程序进行编程以使其能够被系统上的其他进程识别,除了您提到的进程检查之外,没有通用的方法来找到所有这些应用程序。

就是说,如果这些是您的 node.js 应用程序,您当然可以为每个 node.js 应用程序提供一些检测它们的方案。可能有各种各样的方案。有一组现有的服务发现协议(其中一些已列出 here),您可以让您的每个应用程序参与其中一个服务,以便其他应用程序可以相互发现。

或者,您可以在已知端口上创建自己的中央服务 运行,您的每个 node.js 应用程序都会向该端口注册一个控制端口和应用程序的一些识别特征。任何其他应用程序都可以通过在已知端口上查询中央服务应用程序来查看所有 运行 应用程序。然后他们可以获得任何其他应用程序的控制端口并通过该控制端口与它们通信(可能使用 http 请求)。

或者,当每个应用程序启动时,它可能会在已知目录位置放置一个文本文件,指示它的控制端口和应用程序描述。然后,您的任何其他 node.js 应用程序都可以查询该已知位置的文件并查看每个文件的信息。