2016-08-19 64 views
0

有沒有辦法覆蓋一些套接字事件?覆蓋套接字事件(socketio)

我希望能夠加載可以覆蓋標準模塊的可選模塊。

像這樣的事情

socket.on('someevent', function() { 
    //Optional modules actions 
}) 

socket.on('someevent', function() { 
    //Standardmodules actions 
}) 

Standardmodules行動將不會被執行,因爲會有一種方法來檢測,已經有一些行動「someevent」(可選模塊行爲)設置。我希望很清楚,任何想法如何做到這一點?

回答

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(...)刪除的單個聽衆。

+0

偉大的職位。非常感謝。 –