2012-02-07 10 views
9

मुझे यह पता लगाने में सक्षम होना चाहिए कि जब उपयोगकर्ता सॉकेट से कनेक्शन खो देता है, तो ऐसा लगता है कि socket.on("disconnect") को कॉल किया जा रहा है जब मैं अपना लैपटॉप बंद कर देता हूं, इसलिए यह नहीं है उपयोगकर्ता को ऑफ़लाइन के रूप में चिह्नित करने के लिए डेटाबेस को अद्यतन करने के लिए चलाने के लिए AJAX कॉल चलाएं। मैं कैसे जांच सकता हूं कि कनेक्शन बंद कर दिया गया है या जो भी हो?सॉकेट आईओ पता लगाता है कि क्लाइंट कनेक्शन खो गया है

+0

मैं एक श्रोता, या 'दिल की धड़कन' है कि सर्वर से प्रतिक्रिया के लिए ग्राहकों की जाँच करता है होने का प्रस्ताव होगा। यह वो है जो मैं करुंगा। –

+1

मैंने इसे अपनी वेबसाइट के पिछले संस्करण में किया था, हालांकि किसी दिए गए समय पर पर्याप्त उपयोगकर्ताओं को दिया गया है, ऐसा लगता है कि यह सर्वर पर केवल ओवरलोड हो सकता है, जहां तक ​​अनुरोधों की संख्या बढ़ जाती है, हालांकि यह सबसे अच्छा हो सकता है, और केवल विकल्प। –

+0

socket.io दिल की धड़कन का उपयोग करता है, इसलिए मुझे यकीन है कि यह करने योग्य है – EhevuTov

उत्तर

2

हम इस पर भी आए और ऊपर बताए गए अनुसार हमारे दिल की धड़कन टाइमर का उपयोग करें।

उदाहरण के लिए सर्वर हर 5 सेकंड में दिल की धड़कन उत्सर्जित करेगा (हम सर्वर समय को सरल भेजते हैं)। ग्राहक के पास 11 सेकंड का टाइमआउट है, इसलिए इसमें दिल की धड़कन पकड़ने के 2 मौके हैं। अगर यह दिल की धड़कन प्राप्त करता है तो हम टाइमर को रीसेट करते हैं। यदि हम दोनों दिल की धड़कन को याद करते हैं तो टाइमआउट फ़ंक्शन चलाया जाता है और आप जो कुछ भी चाहते हैं वह करते हैं।

काफी सरल।

3

जैसा कि यहां बताया गया है https://github.com/LearnBoost/Socket.IO/wiki/Configuring-Socket.IO, सॉकेट.आईओ का अपना दिल की धड़कन कार्यान्वयन है। लेकिन डिफ़ॉल्ट खोए गए कनेक्शन के लिए 25s अंतराल और 60 के थ्रेसहोल्ड हैं।

तो मेरी सलाह: परीक्षण पर अपेक्षा के अनुसार डिफ़ॉल्ट सेट करें। अन्यथा आप दहलीज याद कर सकते हैं।

उदाहरण:

socket.set("heartbeat timeout", 10); 
socket.set("heartbeat interval", 5); 
+0

यह स्वीकार्य उत्तर होना चाहिए। यह पहली बार काम करता है ... मेरे मामले में टाइमआउट और अंतराल मिलीसेकंड में सेट है, इसलिए 10 के बजाय 10000 ... बिल्कुल सही धन्यवाद! –

संबंधित मुद्दे