本地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); }); });