2012-07-26 17 views
7

लैपटॉप के लिए सोने के लिए आम बात है। यह socket.io क्लाइंट को डिस्कनेक्ट करने का कारण बनता है। जब उपयोगकर्ता वेब ऐप पर वापस आ जाता है, तो socket.io क्लाइंट फिर से कनेक्ट करने का प्रयास नहीं करता है (शायद पुन: कनेक्शन सीमा तक पहुंच गई है?)। यदि उपयोगकर्ता कुछ कार्रवाई करता है तो मैं सॉकेट को फिर से कनेक्ट करने के लिए कैसे कहूं?स्वत: पुनः कनेक्ट करने के बाद गतिविधि पर socket.io क्लाइंट को दोबारा कैसे कनेक्ट करें?

उदाहरण के लिए, मुझे यह जांचने के लिए emit फ़ंक्शन चाहिए कि कनेक्शन सक्रिय है या नहीं, और यदि नहीं, तो फिर से कनेक्ट करने का प्रयास करें।

नोट: मुझे केवल क्लाइंट-साइड जेएस कोड की आवश्यकता है और मैं node.js. का उपयोग नहीं कर रहा हूं।

उत्तर

2

आप connect.failed घटना का उपयोग करने की कोशिश कर सकते:

socket.on('connect_failed', function() { 
    /* Insert code to reestablish connection. */ 
}); 
+0

जुड़ा स्थिति की जाँच करता है मुझे लगता है कि पहले से ही करने की कोशिश की हो सकता था। समस्या यह है कि लैपटॉप उठने के बाद या खोए हुए वायरलेस के बाद पुनः कनेक्ट होने के बाद connect_failed निकाल दिया नहीं जाता है। यही कारण है कि मैं उपयोगकर्ता गतिविधि से दोबारा जुड़ने की सोच रहा हूं, लेकिन मुझे नहीं पता कि यह कैसे करना है। –

+0

+1 क्योंकि जब लैपटॉप जागता है तो इस विधि को बुलाया जाता है। लेकिन मुझे अभी भी ऑटो-रीकनेक्ट टाइम्स के बाद पुनः कनेक्ट करने का प्रयास करने की आवश्यकता है और socket.io छोड़ देता है, जैसे कि नेटवर्क कनेक्टिविटी नहीं होती है। –

4

सॉकेट उदाहरणों एक आंतरिक 'सॉकेट' संपत्ति, जो बारी में कनेक्ट() विधि, जिसे आप कॉल कर सकते हैं है। जब आप ऑब्जेक्ट को तुरंत चालू करते हैं ('ऑटो कनेक्ट' विकल्प द्वारा नियंत्रित) इसे सामान्य रूप से स्वचालित रूप से कॉल किया जाता है। आंतरिक सॉकेट में एक बुलियन "कनेक्ट" संपत्ति भी होती है जिसे आप जांच सकते हैं कि क्या आप सुनिश्चित नहीं हैं कि राज्य क्या है। इसलिए जैसा:

sio = io.connect(); 
//... time passes ... 
if (! sio.socket.connected) { 
    sio.connect(); 
} 

कनेक्ट() विधि चेकों सुनिश्चित करें कि सॉकेट, कनेक्ट करने के लिए हालांकि किसी कारण से यह अगर यह पहले से ही जुड़ा है देखने के लिए जाँच नहीं करता है की कोशिश कर के बीच में नहीं है बनाने के लिए। सुनिश्चित नहीं है कि यदि आप पहले से जुड़े सॉकेट को कनेक्ट करते हैं()

क्लाइंट लाइब्रेरी के लिए स्रोत कोड काफी स्पष्ट और अच्छी तरह से टिप्पणी की गई है, जो the README on github से बहुत अच्छी मदद नहीं देता है। जब आप विकास कर रहे हों तो लाइब्रेरी के एक गैर-एकीकृत संस्करण का उपयोग करना आसान है ताकि आप स्रोत में खोद सकें।

+0

धन्यवाद Dirk। जब भी ग्राहक सर्वर पर कुछ भेजने की कोशिश करता है तो कनेक्ट नहीं होने पर मैं socket.io को दोबारा जोड़ने के लिए कहूंगा? –

+0

आपके कोड को संरचित कैसे किया जाता है इस पर बहुत निर्भर करता है। आप एमिट() के चारों ओर एक रैपर डाल सकते हैं जो कनेक्शन स्थिति की जांच करता है। आपके पास एक "डिस्कनेक्ट" फ़ंक्शन हो सकता है जो एक संवाद को पॉप करता है कि क्या उपयोगकर्ता फिर से कनेक्ट करना चाहता है या नहीं। जब आप लैपटॉप पर ढक्कन बंद करते हैं तो वास्तव में क्या होता है यह देखने के लिए आपको प्रयोग करना होगा। सुनिश्चित नहीं है कि socket.io कोड कैसा महसूस करेगा ... –

7

संस्करण 0.9 आप कनेक्ट विकल्पों को सेट करने की कोशिश कर सकते में कुछ आक्रामक सेटिंग्स पर आपत्ति:

var main = io.connect('/', { 
    'reconnection delay': 100, // defaults to 500 
    'reconnection limit': 100, // defaults to Infinity 
    'max reconnection attempts': Infinity // defaults to 10 
    }); 

ध्यान दें कि max reconnection attemps मतलब यह नहीं है कि कब ग्राहक 10 के बाद असफल प्रयासों के सर्वर से पुन: कनेक्ट करने बंद हो जाएगा। अगर यह सर्वर से 10 बार फिर से कनेक्ट करने में सक्षम था और 11 वें समय के लिए कनेक्शन खो देता है, तो यह फिर से कनेक्ट करना बंद कर देगा।

देखें Socket.IO Configuration

-1

आप एक setInterval चल रहे हों जो की तरह

s.connect() 

if (! s.socket.connected) { 
    s.connect(); 
संबंधित मुद्दे