2012-03-07 18 views
6

का उपयोग कर मेमोरी लीक मैंने पाया है कि मैन्युअल रूप से उन्हें डिस्कनेक्ट करते समय सॉकेट आईओ सर्वर पक्ष में सॉकेट पूरी तरह से नष्ट नहीं होते हैं। मुझे this topic on github उपयोगी मिला है। जबकि मैं कुछ चर-लिंक की तलाश में हूं जो जीसी को सॉकेट की सफाई से रोकते हैं, मैं यहां एक प्रश्न पूछ रहा हूं।socket.io

यदि किसी को भी यहां एक ही समस्या का सामना करना पड़ा, तो यह बहुत मददगार होगी।

कोड वह काम नहीं करता:

socket.on('disconnect', function(){ 
    socket.removeAllListeners(); 
}); 

///................... 

socket.disconnect(); 

वर्कअराउंड कि, हालांकि, प्रतिबंधित पुस्तकालय क्षेत्रों का उपयोग करता है:

delete io.sockets[url]; 
io.j = []; 

उत्तर

1

वास्तव में, इस के रूप में इरादा काम कर रहा है, जब आप एक सॉकेट आप बस डिस्कनेक्ट राज्य में आप उस सॉकेट से अभी और डेटा प्राप्त करने की उम्मीद नहीं कर रहे हैं, वास्तव में सॉकेट को नष्ट करने के लिए जो आप मूल रूप से delete socket कार्रवाई करते हैं। डिस्कनेक्ट घटना पर इस का प्रयोग करें, अर्थात्:

socket.on('disconnect', function(){ 
    delete socket; 
}) 

आप भी io.sockets.sockets पर ऐसा कर सकते एक बाहरी समारोह पर वस्तु:

function deleteSocket(socketID){ 
    delete io.sockets.sockets[socketID]; 
} 
+4

आप कर सकते हैं केवल 'delete' वस्तुओं की विशेषताओं और ऑब्जेक्ट स्वयं – buley

+0

io.sockets.sockets [सॉकेटआईडी] अभी भी हटा नहीं गया है। –