Javascript nodejs/electron:流将太多消息推送到子进程
我通过按钮按下STDIN从电子前端发送消息到C++子进程,结果发现按钮事件触发了一系列相同的发送。 避免冗余消息并确保只发送一条消息的最佳做法是什么 代码 在上面的代码中,我将消息排队并通过流发送。但每按一次按钮似乎至少会有5条信息排队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=
///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()
旨在“设置管道连接”,而不是“发送”的同义词
将这条线移到全球范围后,问题就消失了