डिफ़ॉल्ट रूप से, 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
});
});
ध्यान रखें कि यह सिर्फ एक नमूना है और आप :) शायद एक अनुरोध परम जैसी जानकारी भेज एक छोटा सा बेहतर कुछ को लागू करने, या यह एक और तरीका है की दुकान की जरूरत है - जो कुछ भी आप के लिए काम करता है।
स्रोत
2015-12-03 15:42:39
ऐसा लगता है कि आप मान रहे हैं कि 'socket.id' विशिष्ट रूप से _connection_ के बजाय _user_ की पहचान करेगा। सर्वर [प्रत्येक कनेक्शन के लिए एक नई आईडी उत्पन्न करेगा] (https://github.com/socketio/engine.io/blob/ec673d11f162801b833a516526c1e36fa38f81b6/lib/server.js#L262), और आप इसे ओवरराइड नहीं कर सकते हैं। – robertklep
ठीक है अगर वही सॉकेट.आईडी पुनः कनेक्ट नहीं हो सकता है, तो मैं उन्हें नए जेनरेट किए गए सॉकेट आईडी के साथ दोबारा जोड़ना चाहता हूं, फिर –
स्वचालित रूप से पुनः कनेक्ट करने के लिए 'socket.io-client' _is_ के लिए डिफ़ॉल्ट (दस्तावेज [यहां] (http://socket.io/ दस्तावेज़/क्लाइंट-एपीआई/# प्रबंधक (यूआरएल: स्ट्रिंग, -ओपेट्स: ऑब्जेक्ट)), 'कनेक्शन' विकल्प)। – robertklep