2015-12-03 3 views
7

मैं डिस्कनेक्ट घटना के बाद सॉकेट reconnecct कोशिश कर रहा हूँ एक ही socket.id यहाँ से निकाल दिया जाता है डिस्कनेक्ट घटना पर तो मेरी सॉकेट configरिकनेक्ट सॉकेट

var http = require('http').Server(app); 
var io = require('socket.io')(http); 
var connect_clients = [] //here would be the list of socket.id of connected users 
http.listen(3000, function() { 
    console.log('listening on *:3000'); 
}); 

है मैं के साथ कट उपयोगकर्ता पुनः जुड़ना चाहते हैं एक ही socket.id यदि संभव हो तो

socket.on('disconnect',function(){ 
var disconnect_id = socket.id; //i want reconnect the users here 
}); 
+0

ऐसा लगता है कि आप मान रहे हैं कि 'socket.id' विशिष्ट रूप से _connection_ के बजाय _user_ की पहचान करेगा। सर्वर [प्रत्येक कनेक्शन के लिए एक नई आईडी उत्पन्न करेगा] (https://github.com/socketio/engine.io/blob/ec673d11f162801b833a516526c1e36fa38f81b6/lib/server.js#L262), और आप इसे ओवरराइड नहीं कर सकते हैं। – robertklep

+0

ठीक है अगर वही सॉकेट.आईडी पुनः कनेक्ट नहीं हो सकता है, तो मैं उन्हें नए जेनरेट किए गए सॉकेट आईडी के साथ दोबारा जोड़ना चाहता हूं, फिर –

+0

स्वचालित रूप से पुनः कनेक्ट करने के लिए 'socket.io-client' _is_ के लिए डिफ़ॉल्ट (दस्तावेज [यहां] (http://socket.io/ दस्तावेज़/क्लाइंट-एपीआई/# प्रबंधक (यूआरएल: स्ट्रिंग, -ओपेट्स: ऑब्जेक्ट)), 'कनेक्शन' विकल्प)। – robertklep

उत्तर

6

डिफ़ॉल्ट रूप से, Socket.IO पुनः जुड़ने के लिए सर्वर साइड तर्क नहीं है। जिसका अर्थ है कि जब भी ग्राहक कनेक्ट करना चाहता है, तो एक नई सॉकेट ऑब्जेक्ट बनाई जाती है, इस प्रकार इसकी एक नई आईडी होती है। पुन: कार्यान्वयन को लागू करने के लिए आप पर निर्भर है।

ऐसा करने के लिए, आपको इस उपयोगकर्ता के लिए कुछ स्टोर करने का एक तरीका चाहिए। यदि आपके पास किसी भी प्रकार का प्रमाणीकरण (उदाहरण के लिए पासपोर्ट) है - socket.request का उपयोग करके आपके पास अपग्रेड होने से पहले प्रारंभिक HTTP अनुरोध निकाल दिया जाएगा। तो वहां से, आप पहले से ही संग्रहीत सभी प्रकार की कुकीज़ और डेटा प्राप्त कर सकते हैं।

यदि आप कुकीज़ में कुछ भी स्टोर नहीं करना चाहते हैं, तो सबसे आसान काम यह है कि कनेक्ट पर, अपने बारे में क्लाइंट विशिष्ट जानकारी पर वापस भेज दें। फिर, जब उपयोगकर्ता फिर से कनेक्ट करने का प्रयास करता है, तो इस जानकारी को फिर से भेजें। कुछ की तरह:

var client2socket = {}; 
io.on('connect', function(socket) { 
    var uid = Math.random(); // some really unique id :) 
    client2socket[uid] = socket; 

    socket.on('authenticate', function(userID) { 
     delete client2socket[uid]; // remove the "new" socket 
     client2socket[userID] = socket; // replace "old" socket 
    }); 
}); 

ध्यान रखें कि यह सिर्फ एक नमूना है और आप :) शायद एक अनुरोध परम जैसी जानकारी भेज एक छोटा सा बेहतर कुछ को लागू करने, या यह एक और तरीका है की दुकान की जरूरत है - जो कुछ भी आप के लिए काम करता है।

+0

क्लाइंट एपीआई के रूप में रिकॉन्क्ट के लिए कई विकल्प देता है लेकिन मैं इसका खराब दस्तावेज के कारण इसका उपयोग नहीं कर पा रहा था, तो क्या आप मेरी मदद कर सकते हैं? –

+0

उह, सॉकेट.ओओ में भी पुनः कनेक्ट करने के लिए तर्क है इसलिए आपका पहला अनुच्छेद पूरी तरह से गलत लगता है। – jfriend00

+0

मेरा बुरा, ** सेवर-साइड ** तर्क कहना चाहता था। इस पर ध्यान दिलाने के लिए धन्यवाद! –