setInterval导致内存溢出?

时间:2015-07-22 13:09:10

标签: javascript node.js setinterval

为了记录,我正在使用Node API进行大量编程。无论如何,当我运行我的代码时,我得到一个内存泄漏错误,说有11个发射器打开。如果是这种情况,我将如何阻止我的程序打开几个getData实例?如果我无法阻止这种情况,是否有一种粗略的方法来删除我不希望发出的实例?我试图每50毫秒运行一次该功能。 这是我的代码:

setInterval(getData, 100);

function getData() {
    "use strict";
    //When the serialport opens:
    serialport.on("open", function() {
        serialport.on("data", function(data) {
            //Takes the current string value, turns it into an integer, then stores it in nCurrentValue
            runData( parseInt(data.toString()) );
        });
    });
}
getData();

function runData(value) {
    "use strict";
    socket.emit('NewData',value);
    console.log(value);
}

1 个答案:

答案 0 :(得分:1)

您可以通过提取getData之外的事件触发器来实现。据我所知,nodejs是事件驱动的,所以你应该只连接onopen / ondata一次,然后所有的连接都会通过你的函数调用。

我猜您只需要执行以下操作:

serialport.on("open", newConnection);
serialport.on("data", newDataReceived);

function newConnection() {
    // do something with the connection...
}

function newDataReceived(data) {
    // do something with the data received
}

我猜测,当连接关闭时,串口也会发送信息,所以你可以添加以下内容:

serialport.on("close", closeConnection);

function closeConnection() {
    // close the connection internally afterwards
}

虽然最后一部分是一个纯粹的猜测...

在这种情况下,nodejs应该在建立新连接时触发open事件,然后在收到数据时触发数据事件。如果要检查用于序列端口的库,可能会有如何使用库的指南