有没有办法覆盖某些套接字事件?
我希望能够加载可以覆盖标准模块的可选模块。
像这样的东西
socket.on('someevent', function() {
//Optional modules actions
})
socket.on('someevent', function() {
//Standardmodules actions
})
标准模块操作将不会被执行,因为有一种方法可以检测到已经为某些事件设置了一些操作' someevent' (可选模块操作)。我希望它清楚,知道如何做到这一点?
答案 0 :(得分:1)
socket.io套接字继承自EventEmitter
对象以及.on()
来自的对象。因此,您可以使用EventEmitter
上的各种方法来查看安装了哪些事件处理程序。例如,你可以这样做:
socket.listeners('someevent')
它将返回一个函数数组,这些函数作为该事件的事件处理程序安装。
或者,您可以这样做:
socket.eventNames()
它将返回一个事件名称数组,至少有一个处理程序。
eventEmitter
没有提供覆盖"覆盖"另一个事件处理器要手动执行此操作,您可以清除上一个事件侦听器,然后安装新的事件侦听器。
例如,这是一个覆盖功能:
EventEmitter.prototype.override = function(event, fn) {
this.removeAllListeners(event);
this.on(event, fn);
}
那么,你可以在这样的套接字上使用它:
socket.override('someevent', myHandler);
注意:EventEmitters旨在支持许多侦听器,因此许多不同的代码可以监视同一个发射器。因此,以这种方式强制覆盖是一种蛮力的做事方式,并且通常不会被推荐,因为它可能无意中混淆了监视套接字活动的其他代码。最好使用.removeListener(...)
删除要删除的单个侦听器。