Nodejs进程可以在其运行时轻松生成和与子nodejs进程进行通信。但是,Nodejs进程是否有办法了解并由其他来源产生的其他non-child 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应用程序都可以查询该已知位置中的文件,并查看每个文件的信息。