本地eventEmitter侦听全局eventEmitter

时间:2014-04-22 01:56:37

标签: node.js events eventemitter

我几乎把问题标题写成 - 在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

1 个答案:

答案 0 :(得分:0)

很久以前就提出过这个问题了,但不管怎么说这是我的答案,因为它还没有答案。

监听套接字对象的“close”事件,然后删除对全局的回调。所以它看起来像:

X.addListener("someEvent", callback);

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