我几乎把问题标题写成 - 在eventEmitters之间进行通信
我有一个node.js模块(X),它位于全局范围内(它使用eventEmitter)。然后我有每个套接字本地的代码(用户连接)。
现在我正在通过全局变量G = {' X':X}执行X,以便套接字可以像这样访问X:
G.X.on('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 = G.X;
ee.on('someEvent',function() { console.log('hello'); });
但它仍会收到事件的倍数。
hello
hello
hello
答案 0 :(得分:0)
很久以前就提出过这个问题了,但不管怎么说这是我的答案,因为它还没有答案。
监听套接字对象的“close”事件,然后删除对全局的回调。所以它看起来像:
X.addListener("someEvent", callback);
X.on("someEvent", function(socket){
socket.on("close", function(){
X.removeListener("someEvent", callback);
});
});