我几乎把题目写成- eventEmitters通信。
我有一个node.js模块(X),它位于全局范围(它使用eventEmitter)。然后,我有每个套接字的本地代码(用户连接)。
现在,我正在对全局变量G={'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发布于 2014-10-20 12:13:51
这个问题很久以前就有人问过了,但我的回答是这样的,因为现在还没有答案。
侦听套接字对象的“关闭”事件,然后删除对全局的回调。所以看起来是:
X.addListener("someEvent", callback);
X.on("someEvent", function(socket){
socket.on("close", function(){
X.removeListener("someEvent", callback);
});
});https://stackoverflow.com/questions/23209072
复制相似问题