Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/40.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js IPC在两个不相关的节点进程之间使用共享内存通信_Node.js_Ipc_Shared Memory - Fatal编程技术网

Node.js IPC在两个不相关的节点进程之间使用共享内存通信

Node.js IPC在两个不相关的节点进程之间使用共享内存通信,node.js,ipc,shared-memory,Node.js,Ipc,Shared Memory,我在同一台windows机器上运行了两个不相关的node js进程。我希望这两个进程相互通信,但不使用FileIO(性能问题)和套接字(安全问题)。我们有什么办法可以做到吗?我读过关于共享内存和基于管道的通信的内容,但找不到node js的任何实现。这一问题的答案取决于一个节点进程是否正在启动另一个节点进程。如果一个节点进程使用fork()启动另一个节点进程,那么它可以使用process.send()和process.on('message',…)进行通信 看 对于子进程: // child.j

我在同一台windows机器上运行了两个不相关的node js进程。我希望这两个进程相互通信,但不使用FileIO(性能问题)和套接字(安全问题)。我们有什么办法可以做到吗?我读过关于共享内存和基于管道的通信的内容,但找不到node js的任何实现。

这一问题的答案取决于一个节点进程是否正在启动另一个节点进程。如果一个节点进程使用
fork()
启动另一个节点进程,那么它可以使用
process.send()
process.on('message',…)
进行通信

对于子进程:

// 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或您的一个公共ip地址时,才会发生这种情况。如果您绑定到127.0.0.1,则不应该发生这种情况,那么它应该只能从您的计算机访问

达到127.0.0.1的流量也会绕过网络工作,因此它不会离开您的计算机或进入您的网卡

此外,您还可以使用更难访问的本地命名套接字

如果您担心其他一些本地服务将能够与您的频道通信,您可以通过传递机密信息或加密内容来解决这一问题


您可以在以下堆栈溢出答案中找到有关使用命名套接字和管道的更多详细信息:

很抱歉,回复太晚。感谢@luis提供有关安全相关套接字的清晰信息。我不知道。我们已经验证了这些信息,并且正在使用“命名管道”解决方案。除此之外,您的第一个解决方案是针对子进程的,我在标题中明确提到,这些进程是不相关的,因此我们不能对这些进程使用stdin和stdout。
// 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 });