บริบท
เกมที่จัดส่งเป็นแอปเว็บโปรเกรสซีฟซึ่งมีตัวจับเวลา ( setTimeout
, setInterval
) และการเชื่อมต่อ websocket เพื่อรับการสื่อสารตามเวลาจริง
เกิดอะไรขึ้น
ทุกอย่างเรียบร้อยตราบใดที่ผู้ใช้ยังอยู่ในแอพ แต่เมื่อผู้ใช้ไปที่แท็บอื่นหรือแอพอื่นหรือปิดหน้าจอ (ในกรณีที่ใช้มือถือ) มันจะกลายเป็น "โลกที่ไม่รู้จักชั่วร้าย"
- เว็บซ็อคเก็ตอาจหรือไม่อาจกลายเป็น "หยุดชั่วคราว" หรือ "ปิด"
- ตัวจับเวลาดูเหมือนว่าพวกเขาจะถูกควบคุมปริมาณหรือเลิก
พฤติกรรมนี้ดูเหมือนจะขึ้นอยู่กับเบราว์เซอร์และแพลตฟอร์มและบางทีอาจขึ้นอยู่กับพฤติกรรมของผู้ใช้ ฉันเดาว่าเบราว์เซอร์และระบบปฏิบัติการมีวงจร / กลไกของตัวเองเพื่อประหยัดแบตเตอรี่และ / หรือการคำนวณ
เมื่อผู้ใช้กลับมาแอปนั้นอยู่ในสถานะที่ไม่รู้จักและฉันกำลังพยายามกู้คืนสถานะอย่างถูกต้อง
เกี่ยวกับเว็บซ็อกเก็ตฉันมีการเชื่อมต่ออัตโนมัติกับsocket.ioและเชื่อมต่ออีกครั้ง - websocketแต่มันก็ไม่เพียงพอที่จะแก้ปัญหาทุกอย่าง
กำลังมองหาคำตอบ
- "วงจรชีวิต" ของเบราว์เซอร์ต่าง ๆ ที่เกี่ยวข้องกับสิ่งเหล่านี้คืออะไร? เป็นเอกสารนี้หรือไม่? พวกเขาตัดสินใจปิดและเค้นเมื่อไหร่?
- พวกเขาทำอะไรกับ websockets อย่างแน่นอน? เบราว์เซอร์เพิ่งยกเลิกการเชื่อมต่อหรือไม่
- พวกเขาทำอะไรกับตัวจับเวลาอย่างแน่นอน? พวกเขาเร่งเร้าพวกเขาหรือหักหลังพวกเขาหรืออย่างอื่น
- เกิดอะไรขึ้นกับการใช้งานจาวาสคริปต์โดยทั่วไป? หยุดชั่วคราว / ทำลาย / ควบคุมปริมาณ?
- มีวิธีที่จะขอเข้าสู่วงจรชีวิตของเบราว์เซอร์บางประเภทเมื่อกำลังจะปิดบางสิ่งหรือไม่? สิ่งเดียวที่ฉันสามารถค้นหาได้คือAPI การมองเห็น
มีวิธีในการทำซ้ำพฤติกรรมนี้เพื่อทดสอบวิธีการแก้ปัญหาได้หรือไม่? มันยากมากบนเดสก์ท็อป ไม่สามารถปิดเว็บและนักพัฒนา Chromium ไม่รีบร้อนที่จะช่วยปัญหาตั้งแต่ปี 2014 (!): เว็บไม่รวมอยู่เมื่อใช้การควบคุมปริมาณการเชื่อมต่อ
ไม่ว่าข้างต้นจะมีวิธีแก้ปัญหาข้ามเบราว์เซอร์ในทางปฏิบัติในการตรวจสอบ / แก้ปัญหานี้หรือไม่? (เช่นจากประสบการณ์ Firefox บนเดสก์ท็อปดูเหมือนจะทำงานแตกต่างอย่างสิ้นเชิงเมื่อเทียบกับ Chrome และ iPhone จะตัดการเชื่อมต่อบ่อยกว่า Android)
ลิ้งค์ที่มีความเกี่ยวข้อง