Предположим, что есть объекты, что делает подписку на сервер сокета, как так:Как отписаться от подписки на socket.io?
socket.on('news', obj.socketEvent)
Эти объекты имеют короткий срок службы и часто создаются, производя много подписок. Это похоже на утечку памяти и склонной ситуации ошибок, которые интуитивно можно предотвратить таким образом:
socket.off('news', obj.socketEvent)
, прежде чем объект будет удален, но, увы, не является off
метод в гнезде. Есть ли другой способ для этого?
Редактировать: не нашел ответа. Я назначаю пустой метод для перезаписывания метода-оболочки для исходного обработчика события. Ниже приведен пример.
var _blank = function(){};
var cbProxy = function(){
obj.socketEvent.apply(obj, arguments)
};
var cbProxyProxy = function(){
cbProxy.apply ({}, arguments)
}
socket.on('news', cbProxyProxy);
// ...and to unsubscribe
cbProxy = _blank;
Это похоже на работу, событие исчезает из SocketNamespace, хотя мне еще предстоит провести обширное тестирование этой части. Также вы были правы в отношении прокси-решения, поэтому он обновлен для его юмора –
Это не работает? WTF cbProxy есть? –
Что не работает? 'cbProxy' был методом обратного вызова, определенным OP. –