Nodejs обнаружить другие случаи Nodejs - PullRequest
0 голосов
/ 18 января 2020

Процесс 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, вероятно, будет совершенно другим процессом .

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

1 Ответ

0 голосов
/ 18 января 2020

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

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

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

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

...