मुझे अपनी वेबसाइट के प्रत्येक उपयोगकर्ता की ऑनलाइन/ऑफ़लाइन स्थिति निर्धारित करने के लिए एक समाधान की आवश्यकता है। मेरी साइट एक विलक्षण पृष्ठ है जिसमें क्लिक आदि के लिए कोई लिंक नहीं है, और, अधिकांश भाग के लिए, उपयोगकर्ता केवल कुछ भी किए बिना विस्तारित अवधि के लिए टैब को खुला रखेगा। उपयोगकर्ता के ऑफ़लाइन होने का समय बहुत अधिक सटीकता के साथ निर्धारित करने की आवश्यकता नहीं है, शायद दस मिनट के भीतर या उनमें से वास्तव में ऑफ़लाइन हो रहा है।

इन मानदंडों के कारण, मैं टाइमस्टैम्प के साथ उपयोगकर्ता निष्क्रियता का पता लगाने के लिए डेटाबेस समाधान का उपयोग नहीं कर सकता, और मुझे अपनी साइट को अधिक से अधिक ब्राउज़रों और संस्करणों तक पहुँचाने की आवश्यकता है, इसलिए वेब सॉकेट शायद समीकरण से बाहर हैं। जावास्क्रिप्ट "ऑनअनलोड" और "अनलोड" ईवेंट अप्रत्याशित सिस्टम शटडाउन आदि जैसी घटनाओं को लेने में सक्षम नहीं लगते हैं, इसलिए पर्याप्त सटीक नहीं हैं।

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

मुझे कोड लिखने में मदद चाहिए, क्या कोई मदद कर सकता है? यह मुख्य रूप से PHP में "श्रोता" को कार्यान्वित कर रहा है जिसके साथ मैं संघर्ष कर रहा हूं।

अनुलेख मुझे यकीन नहीं है कि यह कुछ भी बदलता है, लेकिन एक बार जब उपयोगकर्ता ऑफ़लाइन होने के लिए निर्धारित हो जाता है, तो मुझे एक छोटी PHP स्क्रिप्ट चलाने की आवश्यकता होती है जिसे मैंने पहले ही लिखा है जो JSON फ़ाइल से कुछ संबंधित डेटा को हटा देगा।

1
Charles Raiser 31 मार्च 2018, 01:06

3 जवाब

सबसे बढ़िया उत्तर

MadeInDreams और Sheepherder की सलाह के बाद, मुझे अपनी आवश्यकताओं का समाधान मिला।

Index.php में "अभी भी जीवित" सिग्नल भेजने के लिए अंतराल में अजाक्स कॉल ट्रिगर हुआ:

<script type="text/javascript">
        function ping() {
          $.ajax({
            type: "POST",
            url: 'json_update.php',
            data: ({signal:"1"}),
            success: function(data) {
                handleData(data);
            }
          });
        }
        setInterval(ping, 60000);
</script>

Json_updater.php में:

if($_POST['signal'])
{
// update timestamp for user in json file from calling time() function.

Json_maintainer.php:

// this script is called by a chron job on the server every 1 minute.
// it deletes all json entries with a timestamp which is older than time() - 
120.

ऐसा लगता है कि यह बहुत सटीक है। सटीकता की कीमत पर लोड को कम करने के लिए, पिंग आवृत्ति और कचरा संग्रह को तदनुसार समायोजित किया जा सकता है।

संभवतः एक साथ दो लिपियों द्वारा लिखी जा रही json फ़ाइल के कारण, डेटा भ्रष्टाचार को रोकने के लिए उचित फ़ाइल लॉकिंग की आवश्यकता है। यदि डेटाबेस सिस्टम का उपयोग किया जा रहा है, तो यह समस्या कतारबद्ध यांत्रिकी द्वारा नकार दी जाती है और लागू नहीं होती है।

2
Charles Raiser 1 अप्रैल 2018, 10:43

यदि आपका पृष्ठ एक PHP पृष्ठ है, तो आप विज़िटर का आईपी पता या कंप्यूटर का नाम एकत्र कर सकते हैं और उस डेटाबेस में स्टोर कर सकते हैं जहां ब्राउज़र आपकी साइट तक पहुंच रहा है। फिर इसे हर मिनट उस डेटा को अपडेट करने के लिए सेट करें। कॉलम आईडी, उपयोगकर्ता, उपयोगकर्ता लाइव होंगे।

उपयोगकर्ता लाइव हर मिनट अपडेट किया जाएगा जहां उपयोगकर्ता = 'आईपी या कंप्यूटर का नाम'।

आप डेटाटाइम या टाइमस्टैम्प या अपनी पसंद से अपडेट कर रहे होंगे।

0
Sheepherder 30 मार्च 2018, 22:24

PHP सर्वर की तरफ है और ऐसा कोई तरीका नहीं है जिससे PHP को पता चल सके कि इस पेज पर क्या हो रहा है। आप 5 मिनट की निष्क्रियता के बाद समय का उपयोग कर सकते हैं और अपने उपयोगकर्ताओं को ऑफ लाइन के रूप में सेट कर सकते हैं। लेकिन चूंकि आपके पृष्ठ पर क्लिक करने के लिए कोई लिंक नहीं है, इसलिए गतिविधि को ट्रैक करना कठिन होगा।

एक विकल्प शायद आपके पृष्ठ पर एक जावास्क्रिप्ट का उपयोग करना होगा जो आपको यह बताने के लिए हर 5 मिनट में सर्वर से संपर्क करेगा कि यह पृष्ठ अभी भी क्लाइंट ब्राउज़र में खुला है। यह तब भी काम करेगा जब उपयोगकर्ता सक्रिय रूप से आपका पृष्ठ नहीं देख रहा हो। आप आगे जाकर पता लगा सकते हैं कि उपयोगकर्ता का फोकस आपके पेज पर है या नहीं। इसलिए टैबिंग आउट करने से वे आपके पृष्ठ पर ध्यान केंद्रित नहीं कर पाएंगे।

2
MadeInDreams 30 मार्च 2018, 22:17