本地eventEmitter正在侦听全局eventEmitter

我几乎将问题标题写成 – 在事件发送器之间进行通信

我有一个node.js模块(X)在全局范围(它使用eventEmitter)。 然后我有每个套接字本地代码(用户连接)。

现在我通过全局variablesG = {'X':X}来携带X,以便套接字可以像这样访问X:

GXon('someEvent',doSomething); 

这是愚蠢的! 现在,每次我开始我的服务器似乎行为正常(我收到事件),但如果我刷新页面,并发出一个事件,我得到它两次。 如果我再次刷新页面,我会得到事件3次。

我认为我将监听器绑定到全局相同的eventEmitter。

我如何使一个单独的本地eventListener侦听全局eventEmiter的发射?

我知道如何设置一个eventEmiter:

 var events = require('events'); var ee = new events.EventEmitter(); ee.on('someEvent',function(){console.log('hello');}); 

但它并没有赶上另一个事件…

我也尝试使用eventEmitter复制模块

 var ee = GX; ee.on('someEvent',function() { console.log('hello'); }); 

但它仍然收到一个事件的倍数。

 hello hello hello 

这个问题在很久以前就被问过了,但是这里是我的答案,因为目前还没有答案。

收听套接字对象的“closures”事件,然后将callback移除到您的全局。 所以它看起来像:

 X.addListener("someEvent", callback); X.on("someEvent", function(socket){ socket.on("close", function(){ X.removeListener("someEvent", callback); }); });