1

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 进行通信可能是一个完全不同的过程。

这个问题能解决吗?是否有现有的图书馆可以做到这一点?这可以以跨平台的方式完成吗?

4

1 回答 1

1

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

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

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

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

于 2020-01-18T06:16:04.673 回答