2010-07-19 14 views
49

मैं वर्तमान में ऑफ़लाइन समर्थन के लिए सभी HTML5 उपहारों का उपयोग करके ऑफ़लाइन वेबपैप लिखने की प्रक्रिया में हूं। हालांकि अब मैं सिंक मॉड्यूल लिखने के बारे में सोचने के लिए शुरू कर रहा हूं जो यह सुनिश्चित करेगा कि सर्वर पर किसी ऑफ़लाइन डेटा को सर्वर और सर्वर डेटा पर वापस भेज दिया जाए। अब मुझे यकीन है कि यह पहले किया गया है, मेरा मतलब है कि यह एक सुंदर क्लासिक डिजाइन मुद्दा है जो मोबाइल उपकरणों को प्रभावित करता है और अन्य चीजों की एक बड़ी संख्या को प्रभावित करता है। तो मुझे आश्चर्य है कि क्या कोई मुझे इस तरह की चीज़ के लिए कुछ अच्छे डिजाइन संसाधनों के बारे में बता सकता है?ऑफ़लाइन/ऑनलाइन डेटा सिंक्रनाइज़ेशन डिज़ाइन (जावास्क्रिप्ट)

अब मुझे वास्तव में इसके साथ परिष्कृत होने की आवश्यकता नहीं है, मेरा मतलब है कि मैं एक ही डेटा तक पहुंचने वाले एकाधिक उपयोगकर्ताओं को संभाल नहीं रहा हूं और मुझे खुशी है कि संघर्ष विलय न करें (केवल नवीनतम लें) लेकिन फिर भी मुझे एक ऐसा डिज़ाइन जो मुझे भविष्य में उन विकल्पों की अनुमति देगा।

इसके अलावा, क्या इस प्रकार की चीज़ को लागू करने वाली कोई खुली स्रोत परियोजनाएं हैं? मैं किसी और के कोड को छीनने से ऊपर नहीं हूं (यदि लाइसेंस अनुमति देता है) और मैं बंदरगाह से खुश हूं।

उत्तर

8

मुझे एक ही समस्या थी। मैंने पूरी तरह से JSON इन और आउट दृष्टिकोण का उपयोग करने का निर्णय लिया। समाधान मैं प्रपत्र प्रस्तुत करने पर ले रहा हूँ है:

  1. पकड़ प्रपत्र घटना प्रस्तुत
  2. जांच या नहीं, उपयोगकर्ता ऑनलाइन है
  3. यदि उपयोगकर्ता तो सामान्य रूप पोस्ट के रूप में प्रपत्र सबमिट ऑनलाइन है
  4. यदि उपयोगकर्ता ऑफ़लाइन है तो JSON अनुरोध को स्ट्रिंग करें और इसे स्थानीय रूप से स्टोर करें (मैंने वेब SQL डेटाबेस का उपयोग करने का निर्णय लिया है)। कतार तालिका बस उरी और पेलोड है।

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

यदि आप मुख्य रूप से में JSON डेटा प्राप्त कर रहे हैं और इसे ऑफ़लाइन उपयोग के लिए कैशिंग करते हैं, तो jquery.offline पर एक नज़र डालें।

दोनों दिशाओं में सिंक्रनाइज़ करने के साथ चुनौती यह है कि आपको स्थानीय कैश किए गए सूचियों को किसी भी CRUD कार्य के साथ अद्यतन करने की आवश्यकता है जिसे आपने कतारबद्ध किया है।

मैं ऐसा करने के लिए एक और अधिक सामान्य तरीका खोजना चाहता हूं।

1

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

9

इसी तरह के डिज़ाइन (अभी तक कोशिश नहीं की गई) के लिए मेरी योजना स्थानीय रूप से डेटा स्टोर करने के लिए PouchDB जैसे कुछ का उपयोग करना है और फिर इसे रिमोट सोफे इंस्टेंस के साथ सिंक करना है। हमारी टीम में

+0

हे! क्या आप सफल हुए हैं? मैं आपका अनुभव सुनना चाहता हूं। – Nek

4

हमने पहले ही ऑफ़लाइन/ऑनलाइन मोड में ऐप विकसित किया है।

हम अगले निम्नलिखित पुस्तकालयों का उपयोग कर रहे हैं:

रैक ऑफ़लाइन का उपयोग करके हम पृष्ठ पर सामग्री को प्रस्तुत करने के लिए सभी संसाधन फ़ाइलों और जेएसटी टेम्पलेट को कैश कर रहे हैं। बैकबोनजे और बैकबोनजेस-लोकल स्टोरेज क्लाइंट पर एमवीसी ऐप बनाने में मदद करता है। यह बहुत बढ़िया है, आपको इसे आजमा देना चाहिए। हम हमेशा डेटा बचाने के लिए स्थानीय स्टोरेज का उपयोग कर रहे हैं। जब हम मॉडल ऑब्जेक्ट के लिए पोस्ट बनाते हैं और स्थानीय स्टोरेज में सहेजते हैं, तो हम समन्वयन के लिए कतार ट्रिगर कर रहे हैं (हमारे पास ऑटो चलने वाली सिंक प्रक्रिया के लिए टाइमर पृष्ठभूमि कार्यकर्ता भी है)। प्रत्येक मॉडल के लिए हमारे पास अलग सिंक क्लास है जिसे कतार सिंक ट्रिगर द्वारा चलाया जाना चाहिए। अगर आपका navigator.onLine => सत्य है तो हम अद्यतन करने के लिए डेटा के साथ सर्वर को अनुरोध भेज रहे हैं। यदि आप ब्राउज़र बंद करते हैं, वैसे भी आप अपना डेटा नहीं खोते हैं क्योंकि आपके पास स्थानीय स्टोरेज में कतार हैं। अगली बार ग्राहक नेविगेटर.ऑनलाइन => सत्य के साथ पहली लोडिंग पर डेटा सिंक करेंगे।

का उपयोग कैसे करें रैक ऑफ़लाइन आप GitHub में मेरी छोटी परियोजना की जाँच कर सकते हैं:

pomodoro-app

गुड लक!

1

मैं वर्तमान में इसी तरह के वेबपैप पर काम कर रहा हूं। "भेजें" बटन वास्तव में localStorage को धारावाहिक प्रपत्र डेटा की बचत होती है (कुछ कतार में) -

  1. फार्म वास्तव में जमा नहीं किया जाता: मैं इस तरह के कार्यप्रवाह बनाने का फैसला किया गया है। यह सबमिट जमा करने के दौरान डिस्कनेक्ट को संभालने के लिए सबमिट करने और अतिरिक्त त्रुटि प्रसंस्करण कोड लिखने से परेशानियों से बचाता है।
  2. डेटा स्क्रिप्ट के बाद ट्रांसपोर्ट स्क्रिप्ट ट्रिगर की गई है। यह ऑनलाइन/ऑफ़लाइन स्थिति की जांच करता है।
  3. ऑनलाइन होने पर, यह कतार से सर्वर (AJAX अनुरोध) से नवीनतम डेटा भेजने की कोशिश करता है, और इसे सफलता पर कतार से हटा देता है (और शॉर्ट टाइमआउट के बाद कतार से अगला डेटा भेजना जारी रखता है)।
  4. यह कुछ समय के बाद शेड्यूल पुनः जांच (सेटटाइमआउट() द्वारा)।
1

आप संभावित भारी Ext जे एस/Sencha ढांचे का उपयोग कर के लिए कर रहे हैं, यह ऑफ़लाइन के साथ एक अच्छा डेटा API (जैसे localStorage) समर्थन और लिखने के माध्यम से स्थानीय तो सर्वर के लिए के लिए एक प्रॉक्सी दृष्टिकोण है। मैं सेन्चा टच (मोबाइल-विशिष्ट) का उपयोग करता हूं।

वेब संग्रहण डीबग करने के लिए, वेनरे देखें।

6

डर्बी, एक नोड एमवीसी ढांचे की जांच करें जिसमें कुछ सुंदर मिठाई सिंक्रनाइज़ेशन और संघर्ष समाधान सुविधाएं हैं। http://derbyjs.com/

+4

डर्बी डेटा सिंक्रनाइज़ेशन के लिए [RacerJS] (https://github.com/codeparty/racer) का उपयोग करता है, इसलिए आपको पूर्ण डर्बी ढांचे के लिए * नहीं जाना है। खुद के अनुसार, रेसरजेएस अभी भी अल्फा में है। –

1

डर्बीजेएस शायद सबसे अच्छा समाधान था। हालांकि डर्बी अभी भी विकास में है और ऑफ़लाइन समर्थन केवल योजना में है और अभी तक लागू नहीं किया गया है। Google समूह (http://groups.google.com/group/derbyjs/browse_thread/thread/7e7f4d6d005c219c) में आप भविष्य में योजनाबद्ध योजनाओं के बारे में अतिरिक्त जानकारी पा सकते हैं।

2

मैं व्यक्तिगत रूप से आपको अनुक्रमित डीबी एपीआई के शीर्ष पर एक रैपर लिखने की सलाह देता हूं जो जांचता है कि आप ऑनलाइन/ऑफ़लाइन हैं या नहीं।

  • यदि ऑफ़लाइन, बस IndexedDB में स्टोर और सेट सभी दस्तावेजों
  • अगर ऑनलाइन पर गलत पर झंडा कायम, सभी दस्तावेजों जहां कायम मिल गलत है और उन्हें MongoDB या कुछ बराबर बैकएंड पर, तो नए स्टोर में स्टोर अनुक्रमित डीबी और सर्वर पर लगातार ध्वज के साथ दस्तावेज़ों में दस्तावेज़।

I've written a small one

आप सुरंग बढ़ाने के लिए स्वचालित रूप से मौजूदा ध्वज सेट करने के लिए होता है और यह भी सुरंग बैकएंड के लिए इन दस्तावेजों के तुल्यकालन

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