Uygulamamı hizmet çalışanları kullanarak çevrimdışı duruma getirmeyi düşünüyorum. Zaten önbellek kaynakları ile tatmin edici sonuçlar elde ediyorum, ama aynı zamanda internete bağlı olup olmadığımı kontrol etmem gerekiyor, eğer değilse - istekleri saklayın ve onu başlatmayın.
Anlayacağım, gelecekteki onsync bununla yardımcı olacaktır, ama bunun için - hatta geçici - çözüme ihtiyacım var.
Ben sadece işçinin içinde bir dizi isteklerini saklamak için denedim, ama kalıcı değil - (GB çevrimdışı içeriği çalışır ve sunarken) bilgisayar yeniden başlatıldıktan sonra çalışmaz.
İyi yön nedir - önbellek gibi dosyaları bir şekilde saklıyor? Veya IndexedDB/SimpleDB (Accessing indexedDB in ServiceWorker. Race condition) kullanarak? (Bu durumda, HTTP GET
aracılığıyla Google Analytics ping) isteklerini belirli türde arızaların tespit ve IndexedDB
kullanarak hatalarını sıraya bir hizmet işçisi kullanmanın https://github.com/GoogleChrome/samples/tree/gh-pages/service-worker/offline-analytics de bir örnek varREST isteklerini eşitlemek için hizmet çalışanları ile depolama
cevap
. Sıra, hizmet çalışanı her başlatıldığında incelenir ve istek başarılı bir şekilde "yeniden oynatılabilir" (ağ kullanılabilir olduğu için) olduğunda, sıradan kaldırılır. Bir hizmet çalışanının ne zaman başlayacağı konusunda herhangi bir garanti olmamakla birlikte (arka planda senkronizasyon etkinlikleri gelecekte de yardımcı olacaktır), eğer bir kullanıcı aktif olarak web uygulamanızı kullanıyorsa, servis görevlisi kendini yeniden canlandırabileceğini garanti edebilir.
Bu
HTTPPOST
s gibi isteklerin diğer türleri jeneralize olabilir, ancak düşünmek için bir kaç şey vardır:
- onların HTTP
POST
sıraya edildiğini kullanıcıların farkında olduğundan emin olun ve irade tekrar oynatılmak. HTTPPOST
s normalde sunucu tarafı durumunu değiştirdiğinden, X saatin yeniden düzenlenmiş isteğinin sonucu olarak bir şey değiştiğinde kullanıcıları şaşırtmak istemezsiniz. - aradığınız hangi hizmeti bağlı olarak, HTTP
POST
s geçerliAuthorization
başlık gerektirebilir. Yetkilendirme için OAuth 2 kullanıyorsanız, sınırlı bir kullanım ömrüne sahip erişim belirteçleri kullanabilir. Önceden geçerli bir Yetkilendirme belirtecinin, isteği yeniden gönderdiğiniz sürenin süresi dolmuş olabilir. - , isteklerinizi sıraya koymak için iyi bir seçenektir, çünkü isteğe bağlı verilerin depolanmasında esneklik sağlar ve örneğin HTTP
POST
'un gövdesini çok çalışmaksızın depolamak mümkün olmalıdır.IndexedDB
'u kullanamıyorsanız (Cordova'u kullanarak desteklenmiyorsa), düşünebildiğim tek diğer seçenek,s ile başarısız olan yeni bir "sıra" önbelleği oluşturmak için Cache Storage API'u kullanmayı denemek olacaktır. Anahtarlar ve değerler olarak boşResponse
nesneleri. Hizmet çalışanı başlangıcında, tümRequests
öğelerinin listesini almak için "sıra" önbelleğindekikeys()
yöntemini kullanabilir ve her için, yeniden oynatmak içinfetch(queuedRequest)
numaralı telefonu arayın. Bu yaklaşımı daha önce denemedim, ama işe yarayacağını düşünüyorum.
Mükemmel cevap, teşekkürler Jeff! –
Herkes, HTTP POST'un gövdesinin IndexedDB'ye nasıl depolanacağı ve daha sonra nasıl alınacağı hakkında bir örnek verebilir mi? – alearg
- 1. iOS'ta çevrimdışı depolama alanıyla webservice'i eşitlemek için en iyi yöntem
- 2. Hizmet Çalışanları iOS için Firefox'ta mevcut mu?
- 3. Hizmet çalışanında ajax isteklerini yoksayma
- 4. WCF REST Hizmet - 401 Yetkisiz
- 5. Jersey REST hizmet sunucusunu nasıl önyükleme yapabilirim?
- 6. Javascript ile HTTP isteklerini yakalayın
- 7. WCF: OperationContext kullanarak REST ve SOAP isteklerini ayırt etme
- 8. Node.js Rest API'sı ile React.js
- 9. Kereviz - Programlı liste çalışanları
- 10. Depolama olarak Azure mobil Depolama
- 11. PHP Heroku arka plan çalışanları?
- 12. Rack Middleware ile AJAX isteklerini nasıl iletirim?
- 13. FOSRestBundle'da Symofny Formları ile POST isteklerini işleme
- 14. QUnit ile AJAX isteklerini test etme
- 15. HTTP isteklerini test etmek için kukla bir REST sunucusu gibi bir şey var mı?
- 16. Web çalışanları aniden sona eriyor
- 17. GoConvey ile bir REST API'sini Test Etme
- 18. javascript ile xhr isteklerini kolayca nasıl dinleyebilirim?
- 19. PayPal REST API - 'Bir iç hizmet hatası oluştu'
- 20. İngilizce numaraları ve arap rakamlarını eşitlemek için filtre veya analizör
- 21. Bir kullanıcı girdisine bir yanıtı eşitlemek ve
- 22. Asmx web servisleri REST ile uyumlu mu?
- 23. Ajax isteklerini normal sayfa görüntülemelerinden ayıran python
- 24. İşçiler POST isteklerini önbelleğe alabilir mi?
- 25. REST yanıtlarını önbelleğe alma, Android için İlkbahar
- 26. HTTP isteklerini dinle
- 27. `Console.ReadLine`.` için yeterli depolama alanı yok
- 28. Ağ isteklerini koklama
- 29. Hizmet ASP.NET sayfasında ASP.NET ile istekleri
- 30. Bir REST API'sine bağlanmak için Node.js'yi kullanma
Sorununuz nedir çok açık değil. Sorunuz, IndexedDB'nin çevrimdışı depolama için kullanılıp kullanılamayacağıysa, o zaman evet yapabilir. Depolama işlemlerinizi nasıl yapılacağını bilmiyorsanız, hem çevrimiçi hem de çevrimdışı modları desteklemeleri için, burada önerilenleri görebilirsiniz: http://stackoverflow.com/questions/22342836/syncing-indexeddb-with-sql -server – dekkard
Teşekkürler ama ben çevrimdışı olacağım zaman onları senkronize etmek için çevrimdışı olduğumda Hizmet İşçi içinde POST istekleri depolamak için bir yol arıyorum. IndexedDB'de saklamak bir yanıt olabilir, ancak IndexedDB [Cordova Plugin] tarafından desteklenmez (https://github.com/MobileChromeApps/cordova-plugin-service-worker/blob/master/README.md) ve Hizmet Çalışanlarını şimdi iOS'ta kullanmanın tek yolu. –