2015-04-24 3 views
6

सेवा सेवा श्रमिकों का उपयोग करके अपना आवेदन ऑफ़लाइन ले जाने के बारे में सोच रहा हूं। मैं पहले से ही कैशिंग संसाधनों के साथ संतोषजनक परिणाम प्राप्त कर रहा हूं, लेकिन मुझे यह भी जांचना होगा कि क्या मैं इंटरनेट से कनेक्ट हूं, अगर नहीं - अनुरोध को स्टोर करें, और इसे ऑनसिंक दबाएं।

मैं समझता हूं कि भविष्य के ऑनसिनक इसके साथ मदद करेंगे, लेकिन मुझे इसके लिए अस्थायी समाधान भी चाहिए।

मैंने केवल कार्यकर्ता के भीतर किसी सरणी में अनुरोधों को संग्रहीत करने का प्रयास किया है, लेकिन यह लगातार नहीं है - कंप्यूटर पुनरारंभ करने के बाद काम नहीं करता है (जबकि SW काम करता है और ऑफलाइन सामग्री परोसता है)।

क्या अच्छी दिशा है - किसी भी तरह फाइलों जैसे कैश में संग्रहीत करना? या इंडेक्सड डीबी/सरल डीबी (Accessing indexedDB in ServiceWorker. Race condition) का उपयोग कर?सेवा श्रमिकों के साथ आरईएसटी अनुरोधों को संग्रहीत करने के लिए उन्हें

+1

यह बहुत स्पष्ट नहीं है कि आपकी समस्या क्या है। यदि आपका प्रश्न यह है कि क्या इंडेक्स डीडी का उपयोग ऑफलाइन स्टोरेज के लिए किया जा सकता है, तो हाँ, यह कर सकता है। आप इतना है कि वे ऑनलाइन और ऑफलाइन दोनों मोड का समर्थन अपने भंडारण संचालन कैसे करना है पता नहीं है, तो आप देख सकते हैं कि वे यहाँ का सुझाव दिया: http://stackoverflow.com/questions/22342836/syncing-indexeddb-with-sql -server – dekkard

+0

धन्यवाद, लेकिन मैं एक तरह से सेवा कार्यकर्ता के भीतर पोस्ट अनुरोध स्टोर करने के लिए जब मैं उन्हें सिंक करने के लिए जब मैं ऑनलाइन जाता हूँ में ऑफ़लाइन कर रहा हूँ की तलाश में हूँ। उन्हें IndexedDB में भंडारण एक जवाब हो सकता है, लेकिन IndexedDB [Cordova प्लगइन] (https://github.com/MobileChromeApps/cordova-plugin-service-worker/blob/master/README.md) द्वारा समर्थित नहीं है, और यह है अब आईओएस पर सेवा श्रमिकों का उपयोग करने का एकमात्र तरीका है। –

उत्तर

19

वहाँ अनुरोधों के कुछ प्रकार के लिए विफलताओं का पता लगाने के (इस मामले में, HTTP GET माध्यम से Google Analytics पिंग्स), और IndexedDB का उपयोग कर विफलताओं अप कतार एक सेवा कार्यकर्ता का उपयोग करने का https://github.com/GoogleChrome/samples/tree/gh-pages/service-worker/offline-analytics पर एक उदाहरण है। जब भी सेवा कार्यकर्ता शुरू होता है तब कतार की जांच की जाती है और यदि अनुरोध सफलतापूर्वक "पुनः चलाया जा सकता है" (क्योंकि नेटवर्क अब उपलब्ध है), तो इसे कतार से हटा दिया गया है। हालांकि जब कोई सेवा कर्मचारी शुरू होगा (पृष्ठभूमि सिंक घटनाएं भविष्य में इसके साथ मददगार होंगी) के बारे में कोई गारंटी नहीं है, तो आप सुरक्षित रूप से यह मान सकते हैं कि यदि कोई सक्रिय रूप से आपके वेब ऐप का उपयोग कर रहा है, तो सेवा कर्मचारी स्वयं को पुनर्जीवित करेगा।

इस अनुरोध के अन्य प्रकार की सामान्यीकृत किया जा सकता है, जैसे HTTP POST है, लेकिन कुछ बातें सोचने के लिए के बारे में कर रहे हैं:

  • सुनिश्चित करें कि आपके उपयोगकर्ताओं बारे में जानते हैं कि उनके HTTP POST पंक्तिबद्ध किया जा रहा है बनाओ और इच्छा दोबारा खेलें चूंकि HTTP POST सामान्य रूप से सर्वर-साइड स्टेटस को संशोधित करता है, इसलिए जब आप X घंटे पुराने रीप्लेड अनुरोध के परिणामस्वरूप कुछ बदलते हैं तो आप उपयोगकर्ताओं को आश्चर्यचकित नहीं करना चाहते हैं।
  • आप जिस सेवा को कॉल कर रहे हैं उसके आधार पर, HTTP POST s को वैध Authorization शीर्षलेख की आवश्यकता हो सकती है। यदि आप प्राधिकरण के लिए OAuth 2 का उपयोग कर रहे हैं, तो यह एक्सेस टोकन का उपयोग कर सकता है जिसमें सीमित जीवनकाल है। जब आप अनुरोध को फिर से चलाते हैं तो पहले वैध प्रमाणीकरण टोकन की अवधि समाप्त हो सकती है।
  • IndexedDB आपके अनुरोधों को कतारबद्ध करने के लिए एक अच्छा विकल्प है, क्योंकि यह मनमाने ढंग से डेटा संग्रहीत करने में लचीलापन प्रदान करता है, और यह संभव है, उदाहरण के लिए, HTTP POST के शरीर को अधिक काम किए बिना स्टोर करना संभव है। आप IndexedDB उपयोग नहीं कर सकते हैं (आप कहते हैं कि यह Cordova का उपयोग कर समर्थित नहीं है), तो केवल अन्य विकल्प मैं के बारे में सोच सकता है के रूप में विफल Request के साथ, एक नया "कतार" कैश बनाने के लिए Cache Storage API का उपयोग करने के प्रयास करने के लिए किया जाएगा कुंजी के रूप में कुंजी और खाली Response ऑब्जेक्ट्स। सेवा कार्यकर्ता स्टार्टअप पर, आप सभी Requests की एक सूची प्राप्त करने के लिए अपने "कतार" कैश पर keys() विधि इस्तेमाल कर सकते हैं, और प्रत्येक के लिए, fetch(queuedRequest) फोन यह पुनः चलाने के लिए। मैंने पहले इस दृष्टिकोण की कोशिश नहीं की है, लेकिन मुझे लगता है कि इसे काम करना चाहिए।
+1

बिल्कुल सही जवाब, धन्यवाद जेफ! –

+0

क्या कोई भी HTTP POST के बॉडी को इंडेक्सड डीबी में स्टोर करने और बाद में इसे पुनर्प्राप्त करने का उदाहरण प्रदान कर सकता है? – alearg

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