bağlam
Gerçek zamanlı iletişim elde etmek için zamanlayıcılar ( setTimeout
, setInterval
) ve websocket bağlantılarına sahip aşamalı bir web uygulaması olarak gönderilen bir oyun .
Ne oluyor
Kullanıcı uygulamada kaldığı sürece her şey yolunda. Ancak kullanıcı başka bir sekmeye veya başka bir uygulamaya gittiğinde veya ekranı kapattığında (mobil durumda), "cehennem bilinmeyen bir dünya" haline gelir.
- Web soketleri "duraklatıldı" veya "kapatıldı" olabilir veya olmayabilir
- Zamanlayıcılar kısılmış veya açılmış gibi görünüyor.
Bu davranış, tarayıcılara ve platforma, hatta belki de belirli kullanıcı davranışına bağlı gibi görünmektedir. Sanırım tarayıcılar ve işletim sistemi pil ve / veya hesaplama tasarrufu için kendi yaşam döngüsüne / mekanizmalarına sahiptir.
Kullanıcı geri geldiğinde, uygulama bilinmeyen bir durumda ve düzgün devlet geri yüklemek için mücadele ediyorum.
Websockets ile ilgili olarak socket.io ve reconnecting-websocket ile otomatik yeniden bağlantım var, ancak her şeyi çözmek için yeterli değil.
Cevap aranıyor
- Bunlarla ilgili olarak farklı tarayıcıların "yaşam döngüleri" nelerdir? Bu belgelendi mi? Ne zaman kapanmaya ve gaz vermeye karar veriyorlar?
- Web soketlerine tam olarak ne yapıyorlar? Tarayıcılar sadece bağlantılarını kesti mi?
- Zamanlayıcılara tam olarak ne yapıyorlar? Onları kısıyorlar mı, yok ediyorlar mı yoksa başka bir şey mi?
- Genel olarak javascript yürütülmesine ne olur? Duraklatıldı / yok edildi / kısaltıldı mı?
- Bir şeyleri kapatacakken bir tür tarayıcı yaşam döngüsü olayına bağlanmanın bir yolu var mı? Bulabildiğim tek şey görünürlük API'sı olabilir
Çözümleri test edebilmek için bu davranışı yapay olarak yeniden üretmenin bir yolu var mı? Özellikle masaüstünde zor. Websockets kapatılamaz ve krom geliştiricileri 2014'ten itibaren bir soruna yardımcı olmak için acele etmiyorlar (!): Bağlantı kısma kullanılırken websockets dahil değildir
Yukarıdakilerden bağımsız olarak, bu sorunu tespit etmek / çözmek için pragmatik bir çapraz tarayıcı çözümü var mı? (örneğin deneyimden, masaüstündeki Firefox, Chrome'a kıyasla tamamen farklı görünüyor ve bir iPhone'un Android'den çok daha sık bağlantısı kesilecek)
İlgili Bağlantılar