Node.js 发送快速节点时,节点红色挂起。发送(msg)

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 red的节点配置问题。 我制作了一个节点,它有一个输入和一个输出。每次输入获取任何类型的有效负载消息时,它都会读取一个文件,并将该内容抛出到输出中。 问题是,当我以0.01秒的间隔发送输入信号时,节点红色流编辑器(web界面)挂起!我已经发现这是最重要的

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崩溃