Javascript nodejs/electron:流将太多消息推送到子进程

Javascript nodejs/electron:流将太多消息推送到子进程,javascript,node.js,electron,Javascript,Node.js,Electron,我通过按钮按下STDIN从电子前端发送消息到C++子进程,结果发现按钮事件触发了一系列相同的发送。 避免冗余消息并确保只发送一条消息的最佳做法是什么 代码 在上面的代码中,我将消息排队并通过流发送。但每按一次按钮似乎至少会有5条信息排队 ///main.js const stream=require('stream'); const hostProc=spawn(child,[]); var stdinStream=new stream.Readable(); const processCmd=

我通过按钮按下STDIN从电子前端发送消息到C++子进程,结果发现按钮事件触发了一系列相同的发送。 避免冗余消息并确保只发送一条消息的最佳做法是什么

代码 在上面的代码中,我将消息排队并通过流发送。但每按一次按钮似乎至少会有5条信息排队

///main.js
const stream=require('stream');
const hostProc=spawn(child,[]);
var stdinStream=new stream.Readable();
const processCmd=exports.processCmd=(cmd)=>{
stdinStream.push(`${cmd}\n`);//将数据添加到内部队列中,供流的用户使用
stdinStream.pipe(hostProc.stdin);
};
尝试 我已经确保每次按下按钮时只调用一个
stream.push

这个按钮只是一个简单的HTML div,绑定到一个click侦听器

/./button.js
const mainProc=remote.require('./main.js');
this.button.addEventListener('click',(evt)=>{
var cmd=evt.msg;
mainProc.processCmd(cmd);
log('button:trigger');
}
还确保没有向按钮添加多余的侦听器

所以问题肯定在流端。

好的,我自己解决了

问题就在我的代码部分

stdinStream.pipe(hostProc.stdin);
每次按下按钮都会被调用。这有效地在每次调用时创建一个新管道。这就是为什么我们在子进程端收到越来越多的冗余消息

.pipe()
旨在“设置管道连接”,而不是“发送”的同义词

将这条线移到全球范围后,问题就消失了