2012-03-29 12 views
9

私はNodejsとSocket.ioを使用しています。クライアントが接続すると、新しいJavaScriptオブジェクトが作成されます。切断時にオブジェクトを削除socket.io

これらのオブジェクトは永遠に残っていますか?クライアントの切断時に削除または削除する必要がありますか?オブジェクトを削除することも可能ですか?私は削除が機能しないことを知っています...

ありがとう - 私はこれは一般的な質問の多くであり、どんな提案も本当に役立つだろうと思います。

ありがとうございます!

答えて

17

あなたがクリーンアップしないと、はい、私はあなたがそれらをグローバルにしていると仮定しているので、永遠にそこにとどまります。

あなたはすべきdisconnectイベントリスナーに結合することにより、ユーザーが切断一度クリーンアップ:

var clients = {} 
sockets.on('connection', function(socket) { 
    clients[socket.id] = socket; 

    socket.on('disconnect', function() { 
    delete clients[socket.id]; 
    }); 
}); 
+1

ありがとうございます!私は他のオブジェクトも追跡するために 'クライアント'に同じメソッドを使用できると仮定します。作成された「ソケット」機能の外には、いくつかのオブジェクトがあります。 – dzm

+0

jup!何人かの人々は、 "socket"変数の中にオブジェクトを追加し、自動的に破壊されます。 'socket.data =" foo "'そして、クライアントはそのソケットに対するIDだけを持っています。 –

+0

パーフェクト、それはいい考えです。再度、感謝します! – dzm

0

私は受け入れ答えが本当に問題を解決していないと思います。 あなたは:

io.on('connection', function(socket){ 
    socket.on('event', function(){ 
     console.log('event fired'); 
    }); 
    socket.on('disconnect', function(){ 
     console.log('user disconnected'); 
    }); 
}); 

ソケットイベントリスナーはio.on内で作成されている()のコールバック。 socket.ioが内部io.on()コールバック内のすべてのeventlisentersを削除しない限り

socket.on('disconnect', function(){ 
    delete socket.namespace.sockets[this.id]; 
    console.log('user disconnected'); 
}); 

:切断した後、これらのイベントリスナーが実際に削除されません.. 私はこのような何かをするはず。 イベントリスナーはそのままです

+0

厳密なモードで削除が許可されていないのですが、これを達成する別の方法はありますか? –

関連する問題