IP C с использованием связи с общей памятью между двумя несвязанными node js процессами - PullRequest
0 голосов
/ 26 апреля 2020

У меня два несвязанных node js процесса, запущенных на одном компьютере windows. Я хочу, чтобы эти два процесса взаимодействовали друг с другом, но без использования FileIO (проблема производительности) и сокетов (проблема безопасности). Есть ли способ, которым мы можем это сделать? Я читал об общей памяти и связи на основе канала, но не смог найти никакой реализации для node js.

1 Ответ

0 голосов
/ 26 апреля 2020

Ответ на этот вопрос зависит от того, запускает ли один процесс узла другой или нет. Если один процесс узла запускает другой, используя fork(), он может обмениваться данными, используя process.send() и process.on('message', ...).

См. https://nodejs.org/api/child_process.html#child_process_subprocess_send_message_sendhandle_options_callback

// parent.js
const cp = require('child_process');
const n = cp.fork(`${__dirname}/sub.js`);

n.on('message', (m) => {
  console.log('PARENT got message:', m);
});

// Causes the child to print: CHILD got message: { hello: 'world' }
n.send({ hello: 'world' });

А для дочернего процесса:

// child.js

process.on('message', (m) => {
  console.log('CHILD got message:', m);
});

// Causes the parent to print: PARENT got message: { foo: 'bar', baz: null }
process.send({ foo: 'bar', baz: NaN });

Если на другом дескрипторе процессы запускаются отдельно, это другая история. Это приводит к вопросу о том, что вы имеете в виду, когда говорите, что не хотите использовать сокеты для решения проблемы безопасности?

Вы обеспокоены тем, что процесс вашего узла будет доступен извне вашего компьютера. Потому что это произойдет только в том случае, если вы связываетесь с IP-адресом 0.0.0.0 или одним из ваших публичных c IP-адресов. Это не должно происходить, если вы привязываетесь к 127.0.0.1, тогда он должен быть доступен только с вашего компьютера.

Traffi c при переходе к 127.0.0.1 также обходит работу сети, поэтому он никогда не покидает ваш компьютер или идет к вашей сетевой карте.

Также вы можете использовать локальные именованные сокеты, которые еще менее доступны. Если вы обеспокоены тем, что какая-то другая локальная служба сможет обмениваться данными с вашим каналом, вы можете обойти это, передав секретную информацию или зашифровав содержимое.

Более подробную информацию об использовании именованных сокетов и каналов можно найти в следующий ответ переполнения стека: Как создать именованный канал в node.js?

...