Ответ на этот вопрос зависит от того, запускает ли один процесс узла другой или нет. Если один процесс узла запускает другой, используя 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?