Node.js 使用侦听器和setInterval可能会导致节点内存泄漏
我写了一个显示传感器信息的程序;然而,两天后,程序主要部分的日期返回两天,显示的传感器读数不再符合实际情况。我正试图找出问题所在,到目前为止,我认为可能是某种内存泄漏。也许是我组织程序的方式导致了这种行为,但我不确定,所以我希望有人能分享他们的观点。我对Node js没有太多经验,所以可能我做错了什么 我正在使用蓝牙传感器,所以我创建了一个使用Noble库的模块。该模块有一个监听器,在计算机每次找到设备时读取传感器数据。我注意到模块和侦听器在两天后工作正常,但我的索引有延迟。在索引部分,我必须通过MQTT发布传感器数据,在这里可以获得不同的值 代码对于文章来说太长了,所以我尽量简化它,只保留关键特性 index.jsNode.js 使用侦听器和setInterval可能会导致节点内存泄漏,node.js,memory-leaks,listener,setinterval,delay,Node.js,Memory Leaks,Listener,Setinterval,Delay,我写了一个显示传感器信息的程序;然而,两天后,程序主要部分的日期返回两天,显示的传感器读数不再符合实际情况。我正试图找出问题所在,到目前为止,我认为可能是某种内存泄漏。也许是我组织程序的方式导致了这种行为,但我不确定,所以我希望有人能分享他们的观点。我对Node js没有太多经验,所以可能我做错了什么 我正在使用蓝牙传感器,所以我创建了一个使用Noble库的模块。该模块有一个监听器,在计算机每次找到设备时读取传感器数据。我注意到模块和侦听器在两天后工作正常,但我的索引有延迟。在索引部分,我必须通
const sensorModule = require("./mySensorModule");
sensorModule.readData(macId);
setInterval(() => {
// Retrieving/Publishing values every two seconds
let newContent = sensorModule.retrieveValues();
//Arrange the informattion and include the date
let measuringValues = createMessage(newContent);
let measuringValuesTopic = "test"
mqttModule.publishMessage(measuringValuesTopic, JSON.stringify(measuringValues), false);
}, 2000);
const noble = require('noble');
const content = {
Content01: 80,
Content02: 20,
Content03: 3000,
Content04: 25,
Content05: 80,
Content06: 10
};
module.exports = {
readData: function (macId) {
noble.on('discover', function (peripheral) {
//Read data
let sensorData = peripheral.advertisement.manufacturerData;
console.log("Date: ", moduleDate);
console.log("SensorData: ", sensorData);
updateData(sensorData)
});
function updateData(sensorData) {
content.Content01 = sensorData.data.humidity;
content.Content02 = sensorData.data.temperature;
content.Content03 = sensorData.data.pressure;
content.Content04 = sensorData.data.accelerationX;
content.Content05 = sensorData.data.accelerationY;
content.Content06 = sensorData.data.accelerationZ;
//Stop and restart of the scanning necessary because of the hardware
noble.stopScanning();
setTimeout(() => {
console.log("Scanning restarted");
noble.startScanning([], true);
}, 6000);
}
},
retrieveValues: function () {
let measuringValueObject = content;
return measuringValueObject;
}
};
mySensorModule.js
const sensorModule = require("./mySensorModule");
sensorModule.readData(macId);
setInterval(() => {
// Retrieving/Publishing values every two seconds
let newContent = sensorModule.retrieveValues();
//Arrange the informattion and include the date
let measuringValues = createMessage(newContent);
let measuringValuesTopic = "test"
mqttModule.publishMessage(measuringValuesTopic, JSON.stringify(measuringValues), false);
}, 2000);
const noble = require('noble');
const content = {
Content01: 80,
Content02: 20,
Content03: 3000,
Content04: 25,
Content05: 80,
Content06: 10
};
module.exports = {
readData: function (macId) {
noble.on('discover', function (peripheral) {
//Read data
let sensorData = peripheral.advertisement.manufacturerData;
console.log("Date: ", moduleDate);
console.log("SensorData: ", sensorData);
updateData(sensorData)
});
function updateData(sensorData) {
content.Content01 = sensorData.data.humidity;
content.Content02 = sensorData.data.temperature;
content.Content03 = sensorData.data.pressure;
content.Content04 = sensorData.data.accelerationX;
content.Content05 = sensorData.data.accelerationY;
content.Content06 = sensorData.data.accelerationZ;
//Stop and restart of the scanning necessary because of the hardware
noble.stopScanning();
setTimeout(() => {
console.log("Scanning restarted");
noble.startScanning([], true);
}, 6000);
}
},
retrieveValues: function () {
let measuringValueObject = content;
return measuringValueObject;
}
};