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
})();以这种方式与pids通信可能是另一个过程。
这个问题能解决吗?是否有一个现有的库可以这样做?这能以跨平台的方式完成吗?
发布于 2020-01-18 06:16:04
默认情况下,所有node.js应用程序都没有通用的、可检测的签名。因此,如果不将这些node.js应用程序编程为系统上的其他进程所能识别的,那么除了您提到的进程检查之外,没有其他通用方法可以找到所有这些应用程序。
也就是说,如果这些是您的node.js应用程序,您当然可以为您的每个node.js应用程序提供一些检测它们的方案。对此可能有各种各样的计划。有一组现有的服务发现协议(其中一些是列出的这里),您可以让每个应用程序参与其中的一个服务,这样其他应用程序就可以彼此发现对方。
或者,您可以在一个已知的端口上运行您自己的中央服务,您的每个node.js应用程序都会使用该端口注册一个控制端口,并识别该应用程序的一些特征。任何其他应用程序都可以通过在已知端口上查询中央服务应用程序来查看所有正在运行的应用程序。然后,他们可以获得任何其他应用程序的控制端口,并通过该控制端口与其通信(可能使用http请求)。
或者,当每个应用程序启动时,它可以将一个文本文件放到一个已知的目录位置,指示它的控制端口和应用程序描述。然后,您的任何其他node.js应用程序都可以查询已知位置的文件,并查看每个位置的信息。
https://stackoverflow.com/questions/59795406
复制相似问题