2015-11-21 12 views
7

पर क्लाइंट से सर्वर तक डिस्कनेक्ट घटना पर डेटा फेंकना मैं डिस्कनेक्ट घटना पर क्लाइंट से सर्वर तक डेटा भेजनेनोड

// ग्राहकों ओर

var gname = "asd"; 
    socket.emit('disconnect',gname); 

// सर्वर साइड

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

     var i = connect_clients.indexOf(data); 
     if(i != -1) { 
      connect_clients.splice(i, 1); 
     } 
} 
सके

उत्तर

2

आप सक्षम नहीं होंगे, क्योंकि सॉकेट सर्वर से डिस्कनेक्ट हो गया था। जब सर्वर डिस्कनेक्ट का पता लगाता है (सर्वर से पहले एक अंश द्वारा जादुई रूप से नहीं) और क्लाइंट और सर्वर के बीच "पुल" पहले से ही बंद/बाधित/जो भी हो - कोई कनेक्टिविटी का मतलब डेटा इंटरचेंज नहीं है।

  1. उपयोग डेटाबेस या स्थानीय चर द्वारा (उदाहरण के लिए ऑनलाइन उपयोगकर्ताओं को ट्रैक) 'socket.id' कुछ उपयोगकर्ता जानकारी स्टोर करने के लिए:

    आप कैसे कट ग्राहक के साथ कुछ करने के लिए पर दो विकल्प हैं। जब आप सर्वर पर disconnect ईवेंट प्राप्त करते हैं तो आप सॉकेट की आईडी देख सकते हैं जो डिस्कनेक्ट हो जाता है। ऑनलाइन उपयोगकर्ताओं को कम करने और इसे दूसरों को प्रसारित करने जैसी आवश्यक सामग्री करने के लिए इस id का उपयोग करें।

  2. (बल्कि खराब समाधान) ग्राहक पर reconnect ईवेंट के लिए प्रतीक्षा करें और कनेक्शन को फिर से स्थापित किए जाने पर वहां से डेटा भेजें। बेशक अगर सर्वर डेटा के नीचे रहेगा तो शायद खो जाएगा।

आप कुछ सरल सर्वर साइड सामान प्रदर्शन करने की जरूरत है, समाधान 1 ठीक काम कर सकते हैं, लेकिन अगर आप कुछ जटिल, न सहेजा गया प्रपत्र डेटा की तरह है, तो आप डेटा को बचाने के कुछ प्रकार के साथ आना होगा localStorage में, उदाहरण के लिए, और इसे reconnect पर वापस सिंक करें।

+0

मैं इसे फिर से बनाने के लिए coudlnt नहीं करता अन्यथा यह मेरी समस्या हल हो गई होगी हालांकि –

+0

शायद संभवतः 'लोकल स्टोरेज' में डेटा संग्रहीत करना और अगले कनेक्ट पर इसे वापस भेजना इस मामले में उचित समाधान होगा। – kaytrance

+0

आपका सॉकेट सब कुछ सॉकेट आईडी पर सबकुछ मायने रखता है और सब कुछ मैं क्लाइंट की सॉकेट आईडी के तहत सहेजता हूं और इच्छा के अनुसार डेटा कनेक्शन लेता हूं –