Node.js 发送快速节点时,节点红色挂起。发送(msg)
我正在努力解决node red的节点配置问题。 我制作了一个节点,它有一个输入和一个输出。每次输入获取任何类型的有效负载消息时,它都会读取一个文件,并将该内容抛出到输出中。 问题是,当我以0.01秒的间隔发送输入信号时,节点红色流编辑器(web界面)挂起!我已经发现这是最重要的Node.js 发送快速节点时,节点红色挂起。发送(msg),node.js,node-red,Node.js,Node Red,我正在努力解决node red的节点配置问题。 我制作了一个节点,它有一个输入和一个输出。每次输入获取任何类型的有效负载消息时,它都会读取一个文件,并将该内容抛出到输出中。 问题是,当我以0.01秒的间隔发送输入信号时,节点红色流编辑器(web界面)挂起!我已经发现这是最重要的 node.send(msg) 这就是问题的原因,因为如果a只是把信息放在 console.log(msg) 一切正常 当节点red挂起时,我唯一能做的事情就是删除流json文件,使其再次“活动” 我得到这个错误: 2
node.send(msg)
这就是问题的原因,因为如果a只是把信息放在
console.log(msg)
一切正常
当节点red挂起时,我唯一能做的事情就是删除流json文件,使其再次“活动”
我得到这个错误:
28 Jun 08:22:43 - [red] Uncaught Exception:
28 Jun 08:22:43 - Error: EMFILE: too many open files, open
节点红色是否限制快速打开、读取和关闭文件
以下是我的.js源代码:
node.on('input', function(msg){
fs.readFile(path.location,(err, data) => {
if (err) throw err;
if(name === 'Mains current') {
data = {payload: data/1000*(-1), topic: msg.topic};
}
else {
data = {payload: data/1000, topic: msg.topic};
}
node.send(data);
})
})
我解决了!
我做了一面忙旗
var busy = false;
node.on('input', function(msg){
if (busy){
console.log('busy');
return;
}
busy = true;
fs.readFile(path.location,(err, data) => {
if (err) throw err;
if(name === 'Mains current') {
data = {payload: data/1000*(-1), topic: msg.topic};
}
else {
data = {payload: data/1000, topic: msg.topic};
}
node.send(data);
busy = false;
})
})
这意味着当节点读取文件时到达的传入消息将丢失。另外,不通过同时具有输入/输出的节点传递传入消息也是一种不好的做法。您应该更新msg.payload并调用
node.send(msg)
,而不仅仅是复制主题,以防止丢失msg对象中的任何其他字段。同时抛出错误将导致节点RED崩溃