警告:可能检测到事件发射器内存泄漏.添加了 11 个 AppUp > 听众.使用 emitter.setMaxListe

warning: possible EventEmitter memory leak detected. 11 AppUp > listeners added. Use emitter.setMaxListeners() to increase limit

本文关键字:AppUp setMaxListe emitter 使用 听众 添加 检测 事件 泄漏 内存 发射器      更新时间:2023-09-26

我正在使用以下事件发射器(我需要此功能)。我的问题是如何避免错误。

似乎我在另一个事件中使用事件。

警告:可能检测到事件发射器内存泄漏。 11 应用起来 听众补充道。使用 emitter.setMaxListeners() 增加限制。

我正在使用节点 0.12.7

这是所有模块代码:

var events = require('events');
var eventEmitter = new events.EventEmitter();
var run = function (req, res) {
        host = req.headers.host.split(':')[0];
        proxy.web(req, res, {
            target: 'http://' + host + ':' + port
        });
};

var runApp = function (req, res) {
    appStatus.eventEmitter.on('AppUp', function () {
        run(req, res);
    });
    if (model.get()) {
        run(req, res);
    }
}

module.exports = {
    runApp: runApp
};

有没有办法避免此错误?

每次调用 runApp 函数时,它都会为 AppUp 事件设置一个侦听器。因此,如果多次调用 runApp 函数,则调用 run 函数的次数将与之前调用 runApp 的次数相同,加上发出 AppUp 事件时的实际调用。

可能的解决方案是仅侦听一次 AppUP 事件,并进行以下修改:

appStatus.eventEmitter.once('AppUp', function () {
    run(req, res);
});