2016-02-29 76 views
-1

我正在使用以下事件發射器(並且我需要此功能)。 我的問題是如何避免錯誤。警告:可能檢測到EventEmitter內存泄漏。添加了11個AppUp>監聽器。使用emitter.setMaxListeners()來增加限制

看來我在另一個事件中使用事件。

警告:可能發生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

每次調用runApp函數時,都會爲AppUp事件設置一個偵聽器。因此,如果您多次調用runApp函數,那麼運行函數將被調用的次數與之前調用runApp的次數相同,並加上發出AppUp事件時的實際調用次數。

可能的解決方案是用下面的修改只有一次聽AppUP事件:

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