2013-01-03 7 views
5

मेरे पास एक PHP अनुप्रयोग है जिसमेंऔर socket.io का उपयोग करके चैट कार्यक्षमता है। मुझे अब क्या करना है उपयोगकर्ता को लॉग आउट करना है यदि उपयोगकर्ता 15 मिनट से अधिक समय के लिए निष्क्रिय है।सॉकेट.ओ ग्राहक से दिल की धड़कन के अलावा निष्क्रियता की जांच

सत्र PHP अनुप्रयोग और Nodejs सर्वर के बीच साझा किए जाते हैं। तो nodejs सर्वर जानता है कि जब कोई उपयोगकर्ता अंतिम बार लॉग इन होता है या उसकी आखिरी गतिविधि कब होती है।

मैं socket.io क्लाइंट को logoff कमांड भेजने की सोच रहा हूं, और अगर मैं दिल की धड़कन और ग्राहक से संदेश के बीच अंतर कर सकता हूं तो यह वास्तव में आसान होगा।

चूंकि PHP एप्लिकेशन केवल पृष्ठ रीलोड या नेविगेशन पर किसी उपयोगकर्ता की गतिविधि के बारे में ही जानता है, तो उपयोगकर्ता निष्क्रिय होने पर भी चैट कर सकता है और PHP एप्लिकेशन यह नहीं जानता कि उपयोगकर्ता चैट कर रहा है या नहीं। इसलिए सत्र से किसी उपयोगकर्ता की अंतिम गतिविधि की जांच नहीं होगी।

तो मुख्य प्रश्न यह है कि, क्या मैं एक ऐसे ग्राहक की पहचान कर सकता हूं जो केवल 15 मिनट से अधिक समय तक दिल की धड़कन भेज रहा है (कोई उत्सर्जन नहीं)?

+0

चैट गतिविधि के आधार पर सत्र को अपडेट करने के लिए सही कार्रवाई नहीं होगी, और यदि अगले दिल की धड़कन पर 15 मिनट के लिए कोई गतिविधि नहीं हुई है? – mekwall

उत्तर

5

चैट गतिविधि के आधार पर लॉग ऑफ करने का सबसे आसान तरीका एक साधारण टाइमर होना है जो हर बार उपयोगकर्ता चैट कर रहा है। कुछ ऐसा:

io.sockets.on('connection', function(socket) { 
    // ... 
    var logoffTimer; 
    socket.on('chat', function() { 
     // clear the timer on activity 
     // should also update activity timestamp in session 
     clearTimeout(logoffTimer); 
     // set a timer that will log off the user after 15 minutes 
     logoffTimer = setTimeout(function(){ 
      // add log off logic here 
      // you can also check session activity here 
      // and perhaps emit a logoff event to the client as mentioned 
      socket.emit("logoff", { reason: "Logged off due to inactivity" }); 
     }, 60 * 15); 
    }); 
}); 
+0

इसे सभी ग्राहकों के लिए लागू करने के लिए इसे थोड़ा सा संशोधित करने की आवश्यकता होगी। उपरोक्त कोड में, किसी भी उपयोगकर्ता की गतिविधि 'logoffTimer' को रीसेट कर देगी। यह कनेक्टिंग सॉकेट के लिए विशिष्ट होना चाहिए। – Broncha

+0

@ ब्रोंचा हम्म। क्या आपको यकीन है? 'कनेक्शन' ईवेंट कनेक्ट होने वाले प्रत्येक क्लाइंट के लिए ट्रिगर किया जाता है, और उस दायरे में 'logoffTimer' परिभाषित किया जाता है। – mekwall

+0

@MarcusEkwall यह सही है! लगभग 3 साल बाद और यह वही है जो मुझे चाहिए, धन्यवाद! – Haring10

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