3

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

1 回答 1

0

这个问题是很久以前提出的,但无论如何这是我的答案,因为还没有答案。

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

X.addListener("someEvent", callback);

X.on("someEvent", function(socket){
  socket.on("close", function(){
    X.removeListener("someEvent", callback);
  });
});
于 2014-10-20T12:13:51.987 回答