2013-02-13 60 views
6

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

मेरा प्रश्न है: क्या नेटवर्क स्थिति में एक परिवर्तन से निपटने के लिए जब आप को रोक कर में एक दूरस्थ सर्वर यानी करने के लिए HTTP अनुरोध के साथ काम कर रहे हैं शुरू करने, अनुरोध आदि रद्द किसी भी बेहतर तरीके हैं ...

+0

easist रास्ता, जो इस मुद्दे को अनदेखा करना भी सबसे अधिक उपयोग और पर्याप्त है। अनुरोध बनाएं, उन्हें सर्वर पर भेजें और यदि कनेक्शन विफल हो जाता है, तो उपयोगकर्ता को एक त्रुटि प्रदर्शित करें। और कुछ नहीं। जब आप विफल हो जाते हैं तो आप एक कनेक्शन पुनः प्रयास कर सकते हैं लेकिन मैं अनुरोध के लिए इसे एक से अधिक बार करने की अनुशंसा नहीं करता। – Sulthan

+0

@ सुल्तान वैकल्पिक रूप से, अगर अनुरोध आंतरिक थे उदा। एनालिटिक्स? –

उत्तर

2

आप अनुरोध भेजने से बचने के लिए नेटवर्क स्थिति में परिवर्तन करते समय पता लगाने के लिए Reachability कक्षा का उपयोग कर सकते हैं। यह कुछ sample code provided by Apple पर आधारित है, और अपडेट किया गया है। जब आपको इंटरनेट कनेक्शन मतदान के बिना बदलता है तो यह आपको बताएगा।

जहां तक ​​मुझे पता है कि यह नेटवर्क उपलब्धता का पता लगाने का सबसे अच्छा तरीका है। नेटवर्क फिर से उपलब्ध होने पर आपको तत्काल अधिसूचना मिल जाएगी। मेरा मानना ​​है कि यह आपको बताता है कि किस तरह का कनेक्शन उपलब्ध है (वाईफाई या सेलुलर)।

यदि अनुरोध करते समय कनेक्शन गिरता है, तो आपको उस स्थिति को संभालना होगा जैसा कि आप वर्तमान में हैं।

0

बस मेरे विचार - आपको अपने परिचालनों (मैन्युअल रूप से) like here पर रद्दीकरण जोड़ना चाहिए। जब आप नेटवर्क स्थिति में परिवर्तन (कोई कनेक्शन नहीं) का पता लगाते हैं, तो आप वर्तमान संचालन रद्द कर सकते हैं, कतार रोक सकते हैं, कुछ प्रबंधक को सूचित कर सकते हैं ताकि यह संचालन को फिर से निर्धारित कर सके। जब नेटवर्क उपलब्ध हो जाता है, तो कतार फिर से शुरू करें।

+0

यही वह समय है जो मैं कर रहा हूं। –

+0

यदि आपने अपने परिचालन में रद्दीकरण तंत्र जोड़ा है तो यह आपके प्रश्न से स्पष्ट नहीं है। जब आप पहले से चल रहे कतार को कतार निलंबित करते हैं तो डिफ़ॉल्ट रूप से प्रभावित नहीं होते हैं। –

+0

आह, मैं देखता हूं।तो इसे स्पष्ट करने के लिए, चल रहे संचालन को ट्रैक किया जाना चाहिए, और इंटरनेट कनेक्शन में कोई परिवर्तन होने पर रद्द कर दिया जाना चाहिए, और फिर कतार की शुरुआत में फिर से जोड़ा जाना चाहिए ताकि इंटरनेट कनेक्शन उपलब्ध हो जाने के बाद फिर से भेजा जा सके? –

0

लेनदेन केवल इस उद्देश्य के लिए हैं। आपको अपने ws को परमाणु पर कॉल करने की आवश्यकता है, यानी, आप एक लेनदेन शुरू करते हैं, अपना कॉल करते हैं, प्रतिक्रिया प्राप्त करते हैं और लेनदेन करते हैं। फिर आप सुनिश्चित कर सकते हैं कि आपका कार्य पूरा हो गया है।

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

0

जैसा कि ल्यूक बताता है, Apple sample इसे संभालने के लिए सबसे अच्छा है। लेकिन मैं नेटवर्क कनेक्शन में परिवर्तन पहचान के लिए आपकी आवश्यकता को भी संबोधित करना चाहता हूं। यह kReachabilityChangedNotification नाम की अधिसूचना को देखकर संभाला जाता है।

दूसरे शब्दों में, आपके विचार नियंत्रक या प्रतिनिधि कोड आदेश नेटवर्क गम्यता संभाल करने में टुकड़ा निम्नलिखित होना चाहिए ("कनेक्टिविटी" पढ़ें) परिवर्तन:

[[NSNotificationCenter defaultCenter] addObserver: self selector: @selector(reachabilityChanged:) name: kReachabilityChangedNotification object: nil]; 

और

//Called by Reachability whenever status changes.  
- (void) reachabilityChanged: (NSNotification*)note  
{  
     Reachability* curReach = [note object];   
     //TODO: Your specific handling. 
}