如何解决使用侦听器和setInterval可能会导致Node中的内存泄漏
我写了一个程序来显示来自传感器的信息;但是,两天后,该程序主要部分的日期将退后两天,并且显示的传感器读数不再符合实际情况。我正在尝试找出问题所在,到目前为止,我认为这可能是某种内存泄漏。也许我构造程序的方式导致了这种现象,但是我不确定,所以我希望有人可以分享他们的观点。我对Node js没有太多经验,所以也许我做错了事。
我正在使用带有蓝牙的传感器,所以我创建了一个使用Noble库的模块。该模块具有一个侦听器,该侦听器在每次计算机找到设备时都会读取传感器数据。我注意到该模块和侦听器在两天后都可以正常工作,但是我的索引存在延迟。在索引部分中,我必须通过MQTT发布传感器数据,并且在那里可以获取不同的值。
该帖子的代码太长了,所以我尝试尽可能地简化它,只保留关键功能。
index.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);
mySensorModule.js
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;
}
};
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。