प्रसंग
एक गेम को एक प्रगतिशील वेब ऐप के रूप में भेज दिया गया है जिसमें रीयल-टाइम संचार प्राप्त करने के लिए टाइमर ( setTimeout
, setInterval
) और वेबसोकेट कनेक्शन हैं।
क्या हो रहा है
जब तक यूजर ऐप में रहेगा तब तक सब कुछ ठीक है। लेकिन जब उपयोगकर्ता दूसरे टैब, या किसी अन्य ऐप पर जाता है या स्क्रीन को बंद कर देता है (मोबाइल के मामले में), तो यह "नारकीय अज्ञात" हो जाता है।
- वेबसोकेट "रुका हुआ" या "बंद" नहीं हो सकता है
- टाइमर ऐसा लगता है जैसे उन्हें गला घोंटा जा रहा है या बहस की जा रही है।
यह व्यवहार ब्राउज़र और प्लेटफ़ॉर्म पर निर्भर करता है और, शायद, विशेष उपयोगकर्ता के व्यवहार पर भी निर्भर करता है। मुझे लगता है कि बैटरी और / या संगणना को बचाने के लिए ब्राउज़र और OS का अपना जीवनचक्र / तंत्र है।
जब उपयोगकर्ता वापस आता है, तो ऐप एक अज्ञात स्थिति में है और मैं राज्य को ठीक से बहाल करने के लिए संघर्ष कर रहा हूं।
Websockets के बारे में मुझे socket.io और reconnecting-websocket के साथ ऑटो-पुन : संयोजन है लेकिन यह सब कुछ हल करने के लिए पर्याप्त नहीं है।
उत्तर खोज रहे हैं
- इनके संबंध में विभिन्न ब्राउज़रों के "जीवनचक्र" क्या हैं? क्या यह प्रलेखित है? वे कब बंद और थ्रॉटल करने का निर्णय लेते हैं?
- वे वेबस्केट्स के लिए वास्तव में क्या करते हैं? ब्राउज़रों सिर्फ उन्हें डिस्कनेक्ट करें?
- वे टाइमर के लिए वास्तव में क्या करते हैं? वे उन्हें गला घोंटकर मारते हैं या उनकी आलोचना करते हैं या कुछ और?
- सामान्य रूप से जावास्क्रिप्ट निष्पादन क्या होता है? रोका / नष्ट / गला घोंटा गया?
- जब यह चीजों को बंद करने जा रहा है तो क्या किसी तरह के ब्राउज़र जीवनचक्र की घटना को हुक करने का कोई तरीका है? केवल एक चीज जो मुझे मिल सकती है वह दृश्यता एपीआई हो सकती है
क्या समाधान का परीक्षण करने में सक्षम होने के लिए इस व्यवहार को कृत्रिम रूप से पुन: पेश करने का एक तरीका है? यह डेस्कटॉप पर विशेष रूप से कठिन है। Websockets को बंद नहीं किया जा सकता है और क्रोमियम डेवलपर्स 2014 ((!) से एक समस्या में मदद करने के लिए जल्दी में नहीं लगते हैं : कनेक्शन थ्रॉटलिंग का उपयोग करते समय websockets शामिल नहीं है
उपरोक्त के बावजूद, क्या इस समस्या का पता लगाने / हल करने के लिए एक व्यावहारिक क्रॉस-ब्राउज़र समाधान है? (अनुभव से उदाहरण के लिए, डेस्कटॉप पर फ़ायरफ़ॉक्स क्रोम की तुलना में पूरी तरह से अलग व्यवहार करता है, और एक iPhone एक Android पर कहीं अधिक बार डिस्कनेक्ट करेगा)
सम्बंधित लिंक्स