सेवा सेवा श्रमिकों का उपयोग करके अपना आवेदन ऑफ़लाइन ले जाने के बारे में सोच रहा हूं। मैं पहले से ही कैशिंग संसाधनों के साथ संतोषजनक परिणाम प्राप्त कर रहा हूं, लेकिन मुझे यह भी जांचना होगा कि क्या मैं इंटरनेट से कनेक्ट हूं, अगर नहीं - अनुरोध को स्टोर करें, और इसे ऑनसिंक दबाएं।
मैं समझता हूं कि भविष्य के ऑनसिनक इसके साथ मदद करेंगे, लेकिन मुझे इसके लिए अस्थायी समाधान भी चाहिए।
मैंने केवल कार्यकर्ता के भीतर किसी सरणी में अनुरोधों को संग्रहीत करने का प्रयास किया है, लेकिन यह लगातार नहीं है - कंप्यूटर पुनरारंभ करने के बाद काम नहीं करता है (जबकि SW काम करता है और ऑफलाइन सामग्री परोसता है)।
क्या अच्छी दिशा है - किसी भी तरह फाइलों जैसे कैश में संग्रहीत करना? या इंडेक्सड डीबी/सरल डीबी (Accessing indexedDB in ServiceWorker. Race condition) का उपयोग कर?सेवा श्रमिकों के साथ आरईएसटी अनुरोधों को संग्रहीत करने के लिए उन्हें
उत्तर
वहाँ अनुरोधों के कुछ प्रकार के लिए विफलताओं का पता लगाने के (इस मामले में, HTTP GET
माध्यम से Google Analytics पिंग्स), और IndexedDB
का उपयोग कर विफलताओं अप कतार एक सेवा कार्यकर्ता का उपयोग करने का https://github.com/GoogleChrome/samples/tree/gh-pages/service-worker/offline-analytics पर एक उदाहरण है। जब भी सेवा कार्यकर्ता शुरू होता है तब कतार की जांच की जाती है और यदि अनुरोध सफलतापूर्वक "पुनः चलाया जा सकता है" (क्योंकि नेटवर्क अब उपलब्ध है), तो इसे कतार से हटा दिया गया है। हालांकि जब कोई सेवा कर्मचारी शुरू होगा (पृष्ठभूमि सिंक घटनाएं भविष्य में इसके साथ मददगार होंगी) के बारे में कोई गारंटी नहीं है, तो आप सुरक्षित रूप से यह मान सकते हैं कि यदि कोई सक्रिय रूप से आपके वेब ऐप का उपयोग कर रहा है, तो सेवा कर्मचारी स्वयं को पुनर्जीवित करेगा।
इस अनुरोध के अन्य प्रकार की सामान्यीकृत किया जा सकता है, जैसे HTTP POST
है, लेकिन कुछ बातें सोचने के लिए के बारे में कर रहे हैं:
- सुनिश्चित करें कि आपके उपयोगकर्ताओं बारे में जानते हैं कि उनके HTTP
POST
पंक्तिबद्ध किया जा रहा है बनाओ और इच्छा दोबारा खेलें चूंकि HTTPPOST
सामान्य रूप से सर्वर-साइड स्टेटस को संशोधित करता है, इसलिए जब आप X घंटे पुराने रीप्लेड अनुरोध के परिणामस्वरूप कुछ बदलते हैं तो आप उपयोगकर्ताओं को आश्चर्यचकित नहीं करना चाहते हैं। - आप जिस सेवा को कॉल कर रहे हैं उसके आधार पर, HTTP
POST
s को वैधAuthorization
शीर्षलेख की आवश्यकता हो सकती है। यदि आप प्राधिकरण के लिए OAuth 2 का उपयोग कर रहे हैं, तो यह एक्सेस टोकन का उपयोग कर सकता है जिसमें सीमित जीवनकाल है। जब आप अनुरोध को फिर से चलाते हैं तो पहले वैध प्रमाणीकरण टोकन की अवधि समाप्त हो सकती है। IndexedDB
आपके अनुरोधों को कतारबद्ध करने के लिए एक अच्छा विकल्प है, क्योंकि यह मनमाने ढंग से डेटा संग्रहीत करने में लचीलापन प्रदान करता है, और यह संभव है, उदाहरण के लिए, HTTPPOST
के शरीर को अधिक काम किए बिना स्टोर करना संभव है। आपIndexedDB
उपयोग नहीं कर सकते हैं (आप कहते हैं कि यह Cordova का उपयोग कर समर्थित नहीं है), तो केवल अन्य विकल्प मैं के बारे में सोच सकता है के रूप में विफलRequest
के साथ, एक नया "कतार" कैश बनाने के लिए Cache Storage API का उपयोग करने के प्रयास करने के लिए किया जाएगा कुंजी के रूप में कुंजी और खालीResponse
ऑब्जेक्ट्स। सेवा कार्यकर्ता स्टार्टअप पर, आप सभीRequests
की एक सूची प्राप्त करने के लिए अपने "कतार" कैश परkeys()
विधि इस्तेमाल कर सकते हैं, और प्रत्येक के लिए,fetch(queuedRequest)
फोन यह पुनः चलाने के लिए। मैंने पहले इस दृष्टिकोण की कोशिश नहीं की है, लेकिन मुझे लगता है कि इसे काम करना चाहिए।
बिल्कुल सही जवाब, धन्यवाद जेफ! –
क्या कोई भी HTTP POST के बॉडी को इंडेक्सड डीबी में स्टोर करने और बाद में इसे पुनर्प्राप्त करने का उदाहरण प्रदान कर सकता है? – alearg
- 1. गणना-आधारित अनुरोधों को सेवा देने के लिए डीजेंगो और आरईएसटी एपीआई
- 2. एंड्रॉइड ऐप के साथ एक आरईएसटी सेवा को सिंक करना
- 3. आरईएसटी सेवा के लिए jQuery AJAX कॉल
- 4. आरईएसटी सेवा परीक्षण स्वचालित करने के लिए सलाह की आवश्यकता
- 5. लिफ्ट आरईएसटी सेवा PUT अनुरोध को पहचानने के लिए
- 6. विंडोज़ खातों के अलावा कुछ और करने के लिए डब्ल्यूसीएफ आरईएसटी सेवा के साथ मूल प्रमाणीकरण?
- 7. स्प्रिंग बूट के साथ एसपीए - गैर-एपीआई अनुरोधों के लिए index.html की सेवा करें
- 8. आरईएसटी सेवा
- 9. नोडोकू श्रमिकों के लिए node.js
- 10. अपस्ट्रीम सेवा विफलता के लिए आरईएसटी एपीआई स्टेटस कोड?
- 11. को हटाने के लिए उन्हें
- 12. एक आरईएसटी सेवा के सामने अनुरोध कतार
- 13. विभिन्न मूल्यों के साथ विभिन्न सेलेरी श्रमिकों को शुरू करना
- 14. .NET विंडोज सेवा के लिए सेटिंग्स को संग्रहीत करने के लिए सर्वोत्तम अभ्यास: सेवा प्रॉपर्टी सेटिंग्स, सीरियलाइजेशन,
- 15. डब्ल्यूसीएफ आरईएसटी सेवा
- 16. मल्टीप्रोसेसिंग श्रमिकों के साथ ट्विस्ट नेटवर्क क्लाइंट?
- 17. लंबे निष्पादन समय के साथ आरईएसटी अनुरोध के लिए दृष्टिकोण?
- 18. डब्ल्यूसीएफ आरईएसटी वेब सेवा
- 19. फ़ाइलों को एन्क्रिप्ट करने के लिए उपयोग की जाने वाली कुंजी को संग्रहीत करने के लिए
- 20. वेब सेवा अनुरोधों को ट्रैक करने के लिए Xamarin में नए अवशेष का उपयोग
- 21. वेब सेवा के बिना डब्ल्यूसीएफ आरईएसटी और एसओएपी सेवा
- 22. वेब श्रमिकों के साथ गर्व से गिरावट
- 23. आरएमआई बनाम आरईएसटी सेवा
- 24. डब्ल्यूसीएफ आरईएसटी सेवा
- 25. डब्ल्यूसीएफ 4.0 आरईएसटी सेवा
- 26. आरईएसटी वेब सेवा
- 27. वसंत आरईएसटी सेवा
- 28. डब्ल्यूसीएफ आरईएसटी सेवा: InstanceContextMode.PerCall
- 29. एक स्प्रिंग बूट आरईएसटी अनुप्रयोग में gzipped अनुरोधों को संभालना
- 30. HTTP अनुरोधों का परीक्षण करने के लिए डमी आरईएसटी सर्वर जैसी चीज?
यह बहुत स्पष्ट नहीं है कि आपकी समस्या क्या है। यदि आपका प्रश्न यह है कि क्या इंडेक्स डीडी का उपयोग ऑफलाइन स्टोरेज के लिए किया जा सकता है, तो हाँ, यह कर सकता है। आप इतना है कि वे ऑनलाइन और ऑफलाइन दोनों मोड का समर्थन अपने भंडारण संचालन कैसे करना है पता नहीं है, तो आप देख सकते हैं कि वे यहाँ का सुझाव दिया: http://stackoverflow.com/questions/22342836/syncing-indexeddb-with-sql -server – dekkard
धन्यवाद, लेकिन मैं एक तरह से सेवा कार्यकर्ता के भीतर पोस्ट अनुरोध स्टोर करने के लिए जब मैं उन्हें सिंक करने के लिए जब मैं ऑनलाइन जाता हूँ में ऑफ़लाइन कर रहा हूँ की तलाश में हूँ। उन्हें IndexedDB में भंडारण एक जवाब हो सकता है, लेकिन IndexedDB [Cordova प्लगइन] (https://github.com/MobileChromeApps/cordova-plugin-service-worker/blob/master/README.md) द्वारा समर्थित नहीं है, और यह है अब आईओएस पर सेवा श्रमिकों का उपयोग करने का एकमात्र तरीका है। –