1. ホーム
  2. javascript

socket.io 特定のリスナーを削除する

2023-10-09 07:04:08

質問

Socket.io v0.9.16を使用しています。 クローム34

特定のリスナーを削除したり、特定のサブスクリプションから退会しようとしています。

こんな感じです。

socket.on('testComplete',function(data){
    console.log('test complete',data);
}); 

function emitTest(){
    console.log('emitting test');
    socket.emit('test','first emit');
}

function removeListener(){
    socket.removeListener('testComplete');
}

を呼び出すと emitTest 関数を呼び出し、次に removeListener 関数を呼び出すと、やはり 'test complete' を呼び出すと emitTest を再度呼び出すと、メッセージが表示されます。ソケット関数が動作するのであれば、リスナーは削除されているはずです。

を削除する方法を探しています。 特定の リスナーを削除する方法を探しています。

この回答 には、removeListenerは動作しないと書かれています。

これをするだけでは何か不都合があるのでしょうか。

socket.removeListener=function(name){
        if(socket.$events.hasOwnProperty(name)){
            delete socket.$events[name];
        }
    };

私は正解として答えをマークしましたが、私のデザインによく合うので、私のコードでは上記を使用しています。

どのように解決するのですか?

//To unsubscribe all listeners of an event
socket.off('event-name');

//to unsubscribe a certain listener
socket.off('event-name', listener);

なお socket.off , socket.removeListener , socket.removeAllListeners , socket.removeEventListener は同義語です。

socket.io v1.4.3にて動作確認済みです。