Nodejs обнаруживают другие экземпляры 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
})();

Общение с pids, обнаруженными таким образом, вероятно, будет совершенно другим процессом.

Можно ли решить эту проблему? Есть ли существующая библиотека, которая делает это? Можно ли это сделать кроссплатформенным способом?


person Gershy    schedule 17.01.2020    source источник
comment
эта библиотека делает то, что вам нужно, я думаю github.com/substack/dnode   -  person C.Gochev    schedule 18.01.2020


Ответы (1)


Не существует универсальной обнаруживаемой сигнатуры, общей для всех приложений node.js по умолчанию. Таким образом, без программирования этих приложений node.js для распознавания другими процессами в системе нет общего способа найти их все, кроме проверки процессов, о которой вы упомянули.

Тем не менее, если это ваши приложения node.js, вы, безусловно, можете дать каждому из ваших приложений node.js некоторую схему для их обнаружения. Для этого могут быть всевозможные схемы. Существует существующий набор протоколов обнаружения служб (некоторые из них перечислены здесь), и вы можете пусть каждое из ваших приложений участвует в одной из этих служб, чтобы другие могли обнаруживать друг друга.

Или вы можете создать свою собственную центральную службу, работающую на известном порту, в котором каждое из ваших приложений node.js будет регистрировать порт управления и некоторые идентифицирующие характеристики приложения. Любое другое приложение может видеть все запущенные приложения, запрашивая приложение центральной службы на известном порту. Затем они могут получить порт управления для любого другого приложения и взаимодействовать с ними через этот порт управления (возможно, используя HTTP-запросы).

Или, когда каждое приложение запускается, оно может поместить текстовый файл в известное расположение каталога, указывающее порт управления и описание приложения. Затем любое другое ваше приложение node.js может запрашивать файлы в этом известном месте и просматривать информацию для каждого из них.

person jfriend00    schedule 18.01.2020
comment
Это отличная ссылка! - person Gershy; 18.01.2020