警告:检测到可能的EventEmitter内存泄漏。 11 AppUp>听众补充道。使用emitter.setMaxListeners()来增加限制

时间:2016-02-29 11:11:29

标签: javascript node.js memory-leaks eventemitter

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

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

  

警告:检测到可能的EventEmitter内存泄漏。 11 AppUp   听众补充道。使用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
};

有没有办法避免这个错误?

1 个答案:

答案 0 :(得分:1)

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

可能的解决方案是仅通过以下修改来侦听AppUP事件一次:

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