2012-12-21 14 views
7

एक बहु-चैट एप्लिकेशन को ध्यान में रखते हुए। उपयोगकर्ता कई कमरे (socket.join(room)) में शामिल हो सकते हैं, उपयोगकर्ता एक कमरे छोड़ सकते हैं (socket.leave(room))।नोड.जेएस और सॉकेट.आईओ - कमरे जारी

जब सॉकेट कमरे छोड़ रहा है तो मैं अन्य कमरे प्रतिभागियों को सूचित करता हूं। यदि सॉकेट वर्तमान में 3 कमरे में है, और अचानक कमरे को सही तरीके से छोड़े बिना वेबसाइट से डिस्कनेक्ट हो जाता है, तो मैं उन कमरों को कैसे सूचित कर सकता हूं जिन्हें उपयोगकर्ता ने छोड़ा है?

यदि मैं सॉकेट डिस्कनेक्ट ईवेंट पर काम करता हूं, तो उपयोगकर्ता उस बिंदु पर किसी भी कमरे में नहीं रहेगा। उपयोगकर्ताओं का एक अलग सरणी रखने का एकमात्र तरीका है, या क्या कुछ चालाक तरीका है जिसके बारे में मैंने सोचा नहीं है?

+0

हम्म, कोई फर्क नहीं पड़ता कि मुझे लगता है कि सॉकेटियो – r3wt

उत्तर

5

डिस्कनेक्ट ईवेंट सॉकेट के दौरान सॉकेट अभी भी आपकी प्रक्रिया के लिए उपलब्ध है। उदाहरण के लिए, इस

io.socket.on('connection', function(socket){ 
    socket.on('disconnect', function() { 
     // this returns a list of all rooms this user is in 
     var rooms = io.sockets.manager.roomClients[socket.id]; 
     for(var room in rooms) { 
      socket.leave(room); 
     } 
    }); 
}); 

काम करना चाहिए हालांकि यह वास्तव में आवश्यक नहीं है के रूप में socket.io स्वचालित रूप से एक डिस्कनेक्ट घटना पर rooms काटना होगा। हालांकि यदि आप एक विशिष्ट कार्रवाई करने के लिए देख रहे थे तो इस विधि का उपयोग किया जा सकता है।

+0

विंडो का उपयोग करने के बारे में कैसे .onbeforeunload क्लाइंट ब्राउज़र में? क्या आपको लगता है कि यह अस्थिर होगा? –

+0

आप ऐसा कर सकते हैं, लेकिन मुझे नहीं लगता कि वहां एक बहुत अधिक बिंदु होगा। इस व्यक्ति ने दिए गए कमरे में अन्य उपयोगकर्ताओं को अलर्ट करने का प्रयास किया है। किसी विशेष ग्राहक के विचार का कोई अन्य प्रभाव नहीं पड़ता है, इसलिए केवल एक ही उपयोगी चीज जो आप कर सकते हैं वह कुछ सॉकेट ईवेंट ट्रिगर करती है जो तब छोड़कर अन्य सभी उपयोगकर्ताओं को बताती है। इसे सर्वर पर रखना और डिस्कनेक्ट ईवेंट का उपयोग करना बेहतर होगा। – Loourr

+0

मैं आपके उत्तर के पहले भाग को काफी समझ नहीं पा रहा हूं ... क्या होगा यदि कमरे गतिशील बनाये गये हों? क्या मुझे उनमें से प्रत्येक के लिए io.of (./ room1) .on बनाना है? –

0

मुझे लगता है कि सॉकेट आपके नोड प्रक्रिया में एक लंबी जीवित वस्तु है। यदि ऐसा है तो उपयोगकर्ता कनेक्ट होने पर आप आसानी से उपयोगकर्ता को अपने सॉकेट ऑब्जेक्ट पर संदर्भ जोड़ सकते हैं। जब आपको सॉकेट डिस्कनेक्ट मिलता है, तो आपको उस उपयोगकर्ता को देखने की आवश्यकता नहीं होती है, जिस सत्र में सत्र होता है।

कनेक्शन या प्रवेश पर

:

http://psitsmike.com/2011/09/node-js-and-socket-io-chat-tutorial/:

socket.on('disconnect', function(){ 
    socket.leave(room, socket.user); 
} 

सॉकेट वस्तु और एक ही कमरे चैट क्लाइंट के लिए गुण जोड़ने का एक उदाहरण के लिए यहाँ देखें: डिस्कनेक्ट होने पर

socket.user = yourUser; 

+0

के अनुसार कमरे में हमेशा 2 उपयोगकर्ता होते हैं एक सॉकेट एक सॉकेट.ओ सत्र है ... और कुछ नहीं (socket.id) –

संबंधित मुद्दे