2013-02-16 66 views
9

मेरे पास एक वेब एप्लिकेशन है जहां उपयोगकर्ता को लगातार कनेक्ट होने की आवश्यकता है। डिफ़ॉल्ट रूप से, socket.io 60 सेकंड के बाद कनेक्शन को डिस्कनेक्ट कर देगा। मेरे पास 'पुन: कनेक्शन' चालू है, इसलिए यह हर मिनट कनेक्शन को बंद करना और फिर से खोलना अनिवार्य है। इससे मेरे कनेक्टेड क्लाइंट को फ़ीड्स/सूचनाओं के साथ समस्याएं हो सकती हैं। क्या यह टाइमआउट सेट करने के लिए सुरक्षित होगा, कहने के लिए, 10 मिनट, या संभवतः उच्च? क्या ऐसा कोई कारण है कि अभी यह इतना कम है?क्या यह socket.io पर उच्च बंद टाइमआउट सेट करना सुरक्षित है?

उत्तर

3

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

तथ्य यह है कि आपका कनेक्शन वास्तव में ध्वनियों को बंद कर रहा है जैसे कि यह सही ढंग से हैंडशेकिंग नहीं हो सकता है, या दिल की धड़कन प्राप्त नहीं हो रही हैं।

10

मेरा अनुमान है कि आप 'close timeout' कॉन्फ़िगरेशन को गलत व्याख्या कर सकते हैं। यह 60 सेकंड के बाद कनेक्शन बंद होने का कारण नहीं बनता है। (यदि ग्राहक लगातार पुनः कनेक्ट होते हैं तो दिल की धड़कन व्यर्थ होगी)।

यदि कोई ग्राहक डिस्कनेक्ट करता है, तो close timeout उस कनेक्शन से जुड़े संसाधनों को जारी करने से पहले सर्वर प्रतीक्षा करेगा। अनिवार्य रूप से, यह ग्राहकों को उनके बारे में भूल जाने से पहले पुनः कनेक्ट करने का प्रयास करने के लिए अंतःस्थापित कनेक्टिविटी समस्याओं के साथ अनुमति देता है। close timeout से दस मिनट तक सेट करना शायद एक बुरा विचार है क्योंकि यह सर्वर संसाधनों को जोड़ देगा।

यदि आपके ग्राहक वास्तव में हर 60 सेकंड डिस्कनेक्ट कर रहे हैं, तो, जैसे सैमज ने कहा, कुछ और गलत है।

0

आप इसे पहले से ही समझ चुके होंगे, लेकिन आपकी सॉकेट 60 सेकंड के बाद डिस्कनेक्ट हो सकती है क्योंकि आप सर्वर पर दिल की धड़कन ("2 ::") नहीं भेज रहे हैं।

यहां कुछ पायथन कोड है जो websocket client module के साथ काम करता है।

# on_message handles messages from the server 
def on_message(ws, message): 
    if message[:3] == '2::': 
     ws.send('2::')