2012-12-08 5 views
8

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

एक अतिरिक्त जटिलता के रूप में, हमारे स्कूल सर्वर क्रॉन नौकरियों -_- का समर्थन नहीं करता

+4

संक्षिप्त उत्तर: ** नहीं ** लेकिन फिर भी आप –

+1

को जांचने के लिए नियमित अंतराल पर उपयोगकर्ता को पिंग कर सकते हैं, यह ध्यान में रखें कि यह इस बात पर निर्भर करता है कि उपयोगकर्ता ** ** पिंगिंग द्वारा –

+0

पर जाने का क्या मतलब है उपयोगकर्ताओं? – user1880610

उत्तर

2

यह करने के लिए केवल विश्वसनीय तरीका है अपने सर्वर के लिए एक pinging तकनीक का उपयोग करने के लिए, के रूप में अन्य टिप्पणीकर्ताओं का सुझाव दिया है है। इस तरह आप गेम को नियंत्रित करते हैं, ब्राउज़र नहीं। जिस तरह से आपको उपयोगकर्ताओं को "ट्रैक" करना होगा, उसे AJAX कॉल को आग लगाना है ... मुझे लगता है कि प्रत्येक 5 सेकंड अक्सर सर्वर पर पर्याप्त होता है। यह सब कुछ "ट्रैकिंग" तालिका में कुछ भी INSERT करेगा या आपके "गेम" तालिका में एक नया कॉलम अपडेट करें ताकि पिछली बार उपयोगकर्ता की गतिविधि हो (गेम में सामान्य चाल को अनदेखा कर सकें ... आप सामान्य चाल के लिए यह वही प्रक्रिया कर सकते हैं और अत्यधिक जांच से बचने के लिए पिंगिंग के अंतराल को भी रीसेट कर सकते हैं)। इसलिए हर बार कोई उपयोगकर्ता एक चाल (या कुछ और जो सर्वर इंटरैक्शन की आवश्यकता होती है) बनाता है, तो आपको अपने प्रतिद्वंद्वी की आखिरी सर्वर गतिविधि के समय के लिए चेक करना होगा - अगर प्रतिद्वंद्वी ने 7 सेकंड के भीतर कोई कदम नहीं उठाया है वर्तमान समय, तो प्रतिद्वंद्वी के ब्राउज़र ने संचार करना बंद कर दिया है (किसी भी कारण से)। कारण मैं 7 सेकंड का कारण सर्वर/डेटाबेस संचार और किसी भी संभावित नेटवर्क lagging के लिए अतिरिक्त प्रसंस्करण की वजह से है। चूंकि नेटवर्क लैगिंग शायद बाधा है, इसलिए आप इस मान को 10 की तरह कुछ बढ़ाना चाहेंगे।

+0

उचित प्रतिक्रिया के लिए धन्यवाद! मुझे SO -_- – user1880610

+0

पर इतनी परेशानी की उम्मीद नहीं थी, अब एक अलग प्रश्न के लिए: यह समाधान एक उपयोगकर्ता सक्रिय होने पर निर्भर है। मेरे पास एक लॉबी है जो सभी उपलब्ध गेम प्रदर्शित करती है। क्या कोई तरीका है कि सर्वर दोनों पता लगा सकता है कि क्या दोनों खिलाड़ी छोड़ते हैं, ताकि मुझे उस खेल को मेरी लॉबी में प्रदर्शित न करना पड़े? क्रॉन की कमी यहां एक समस्या बन जाती है। – user1880610

+0

यह वह जगह है जहां मैं एक मल्टीप्लेयर गेम के लिए AJAX का उपयोग करने पर आपके दृष्टिकोण से सहमत नहीं हूं। यह वास्तव में वेबसाइकिलों के साथ किया जाना चाहिए, जहां आपको मतदान और सामान की आवश्यकता नहीं होगी। क्रोनबॉज वास्तव में मदद नहीं करेगा (जब तक कि आपका लॉबी पेज मतदान का भी उपयोग न करे, लेकिन फिर यह उन्हें अनावश्यक बनाता है) क्योंकि सर्वर क्लाइंट को संदेश नहीं भेज सकता है। खेल के दौरान AJAX मतदान के समाधान की तरह, आपको अपनी लॉबी में ऐसा कुछ करना होगा। लॉबी पेज को पहले की तरह हर 5 सेकंड में मतदान करना होगा और यह देखने के लिए जांच करें कि क्या दोनों उपयोगकर्ताओं ने पिछले 7 सेकंड में गतिविधि नहीं की है – Ian

1

आप सटीक निश्चितता के साथ नहीं जानते कि क्लाइंट बंद है या नहीं। आप कुछ योग्य अनुमान लगा सकते हैं, लेकिन यह कभी भी भरोसेमंद नहीं होगा।

शायद आप एक ऐसा पता लगा सकते हैं जहां आप क्लाइंट सत्र सक्रिय हैं या नहीं?

एक कम तकनीक समाधान टाइम आईडी के साथ सत्र आईडी (या एक आत्मनिर्भर अद्वितीय पहचान स्ट्रिंग) को सहेजना होगा। जब भी ग्राहक एक नया अनुरोध करता है (नया पृष्ठ लोड और/या AJAX के साथ), टाइमस्टैम्प अपडेट करें।

चूंकि आपके पास cronjobs तक पहुंच नहीं है, इसलिए आपको एक और समझौता करने की आवश्यकता है - अन्य आगंतुकों को बताएं कि क्लाइंट अभी भी सक्रिय है या नहीं। जब भी कोई विज़िटर पृष्ठ लोड करता है, तो उस तालिका के माध्यम से चलाएं जो सत्र आईडी और टाइमस्टैम्प संग्रहीत करता है और देखें कि क्या कोई सत्र सक्रिय होने पर विचार करने से पुराना दिखता है या नहीं।

यह आपकी सटीक समस्या का एक संलयन नहीं है (क्योंकि यह नहीं किया जा सकता है) लेकिन एक कम तकनीक समझौता।

0

आप उस पृष्ठ पर 'RECURSIVE' AJAX स्क्रिप्ट सेट कर सकते हैं और उस स्क्रिप्ट को चुपचाप समय के बाद सर्वर पर अद्यतन समय भेजते हैं। और सर्वर पर आपको यह विवरण लॉग इन करने के लिए अनुरोध श्रोता स्क्रिप्ट लिखना होगा। यदि आप देखते हैं कि उपयोगकर्ता अनुरोध बंद कर दिया गया है या यह पिछले कुछ समय से नहीं आ रहा है, तो उसने अपना ब्राउज़र बंद कर दिया।

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

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