2012-03-26 21 views
10

पर सॉकेट नहीं भेजता है जब कोई नोड सर्वर से कनेक्ट होता है, तो मैं सभी सॉकेट के साथ एक सरणी रखता हूं। इस तरह से जब भी आवश्यक हो या उपयोगकर्ताओं के माध्यम से ऑनलाइन उपयोगकर्ताओं की संख्या गिनने के लिए संदेशों को लूप कर सकें,node.js डिस्कनेक्ट ईवेंट

यह सब ठीक काम करता है, लेकिन जब डिस्कनेक्ट ईवेंट को निकाल दिया जाता है, तो मैं नहीं करता मेरे तर्कों में एक सॉकेट प्राप्त करें। क्या यह जानने का कोई और तरीका है कि कौन सा सॉकेट बस डिस्कनेक्ट हो गया है?

var allClients = []; 

io.sockets.on('connection', function(socket) { 
    allClients.push(socket); 

    socket.on('disconnect', function(socket) { 
     console.log('Got disconnect!'); 

     var i = allClients.indexOf(socket); 
     delete allClients[i]; 
    }); 
}); 

बेशक उपर्युक्त उदाहरण काम नहीं करता है, क्योंकि डिस्कनेक्ट ईवेंट सॉकेट तर्क (या कोई अन्य तर्क) नहीं देता है। तो क्या एक और घटना है जो डिस्कनेक्ट से पहले निकाल दी गई है जहां सॉकेट अभी भी है?

अली

उत्तर

22

आप पहले से ही है सॉकेट, डिस्कनेक्ट हैंडलर 'कनेक्शन' घटना दायरे के भीतर घोषित किया जाता है क्योंकि। 'डिस्कनेक्ट' हैंडलर पर जा रहे पैरामीटर को हटाने का प्रयास करें, आपको कनेक्शन हैंडलर से सॉकेट पैरामीटर के साथ काम करने में सक्षम होना चाहिए।

io.sockets.on('connection', function(socket) { 
    allClients.push(socket); 

    socket.on('disconnect', function() { 
     console.log('Got disconnect!'); 

     var i = allClients.indexOf(socket); 
     delete allClients[i]; 
    }); 
}); 

इसके अलावा, आप प्रसारित करने के लिए एक सॉकेट सरणी की जरूरत नहीं है, तो आप उस कमरे के अंदर सभी सॉकेट करने के लिए समूह सॉकेट और प्रसारण करने के लिए कमरे का उपयोग कर सकते हैं।

+0

यदि मुझे क्लाइंट से सर्वर से डेटा भेजने की आवश्यकता है जैसे कि उसने पहले 1 में कोई समाधान नहीं किया था? –