是否有办法覆盖一些套接字事件?
我希望能够加载可选模块,可以覆盖标准模块。
像这样
socket.on('someevent', function() {
//Optional modules actions
})
socket.on('someevent', function() {
//Standardmodules actions
})
Standardmodules的动作将不会被执行,因为会有一种方法来检测已经有一些'someevent'的动作集(可选模块的动作)。我希望大家都清楚了,知道怎么做吗?
套接字。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);
注意:eventemitter意味着支持多个监听器,因此许多不同的代码片段可以监视同一个发射器。因此,以这种方式强制覆盖是一种蛮力的方式,通常不建议这样做,因为它可能会无意中与监视套接字活动的其他代码混淆。最好只删除您想要使用.removeListener(...)
删除的单个侦听器。