Сокет 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(...)
.
отличная статья. большое спасибо. –