ASNHTTPRequest की कौन-सी मुख्य विशेषता AFNetworking गुम है?


93

साथ काम हाल ही में ASIHTTPRequest पर बंद कर , ऐसा ध्यान में शिफ्ट किया गया है लगता है AFNetworking

हालाँकि, मुझे अभी तक दो पुस्तकालयों की सुविधाओं की अच्छी तुलना नहीं मिली है, इसलिए मुझे नहीं पता कि मैं स्विच खत्म होने पर क्या खो सकता हूं।

मेरे द्वारा अब तक देखे गए प्रमुख अंतर हैं:

  1. AFNetworking का आकार बहुत छोटा है (जो अच्छा है)
  2. AFNetworking तेजी से सुधार किया जा रहा है (इसलिए यह अभी तक परिपक्व नहीं हो सकता है, एक स्थिर एपीआई अभी तक नहीं हो सकता है?)
  3. दोनों को कैशिंग लगता है, हालांकि मैंने संकेत देखा है कि क्योंकि AFNetworking NSURLConnection का उपयोग करता है यह 50K से अधिक वस्तुओं को कैश नहीं करेगा
  4. ASIHTTPRequest को मैनुअल और स्वचालित (PAC) http प्रॉक्सी के लिए बहुत अच्छा समर्थन है; मुझे इस बात की कोई जानकारी नहीं मिल सकती है कि प्रॉक्सी के लिए AFNetworking के किस स्तर का समर्थन है
  5. AFNetworking को iOS 4+ की आवश्यकता होती है, जबकि ASIHTTPRequest iOS 2 पर वापस काम करता है (वास्तव में मेरे लिए कोई समस्या नहीं है, लेकिन यह कुछ लोगों के लिए एक समस्या है)
  6. AFNetworking (अभी तक) लगातार कैश में नहीं बनाया गया है, लेकिन एक लगातार कैश है जिसमें एक लंबित पुल अनुरोध है: https://github.com/gowalla/AFNetworking/pull/25

क्या किसी ने दो पुस्तकालयों की किसी भी अच्छी तुलना या एक से दूसरे में स्विच करने के किसी भी दस्तावेजी अनुभव को देखा है?


AFNetworking में बहुत विस्तृत प्रलेखन और उदाहरणों की कमी है, इसलिए मैं इसके बारे में बहुत कुछ नहीं कह सकता। मैं ASIHTTPRequest का उपयोग करने का प्रमुख कारण है क्योंकि यह iOS 3.0 का समर्थन करता है और ASIFallbackToCacheIfLoadFailsCachePolicyबहुत अच्छा है। और, मुझे लगता है कि AFNetworking के पास कोई निरंतर कैश समर्थन नहीं है। यह मेरे लिए नो-गो है।
इवात

बस ध्यान दें कि आप पहले व्यक्ति हैं जो टैग करते हैं afnetworking
इवात

एक कैश है जिसे एएफएन नेटवर्किंग में खींचने का इंतजार है, मैंने अपने प्रश्न में एक लिंक जोड़ा है।
जोसेफ

1
@iwat AFNetworking पूरी तरह से समर्थन करता है NSURLCache। यदि आप डिस्क कैश की तलाश कर रहे हैं, तो मैं दिल से पीटर स्टीनबर्गर के SDURLCache कांटे का सुझाव दूंगा
13

2
क्या आपने मेरे नेटवर्किंग ढांचे MKNetworkKit की कोशिश की है? blog.mugunthkumar.com/products/… बेसिक, डाइजेस्ट और एनटीएलएम ऑथेंटिकेशन, ऑटो-कैशिंग, बिल्ट-इन इमेज कैशिंग, सुपर आसान फाइल अपलोड सपोर्ट, बेहतरीन डॉक्यूमेंटेशन कुछ प्लस हैं।
मुगंथ

जवाबों:


59

मुझे ASIHTTPRequest बहुत पसंद था और मुझे यह देखकर दुख हुआ। हालाँकि, ASI का डेवलपर सही था, ASIHTTPRequest इतना बड़ा और फूला हुआ है कि वह iOS और अन्य फ्रेमवर्क के नए फीचर्स के साथ बराबर लाने के लिए भी समय नहीं दे सका। मैं आगे बढ़ा और अब AFNetworking का उपयोग करता हूं।

उस ने कहा, मुझे कहना होगा कि AFNetworking ASIHTTP की तुलना में बहुत अधिक अस्थिर है, और जिन चीजों के लिए मैं इसका उपयोग करता हूं, उन्हें शोधन की आवश्यकता है।

स्क्रीन पर अपने परिणाम प्रदर्शित करने से पहले मुझे अक्सर 100 HTTP स्रोतों के लिए HTTP अनुरोध करने की आवश्यकता होती है, और मैंने AFHTTPNetworkOperation को एक ऑपरेशन कतार में डाल दिया है। सभी परिणाम डाउनलोड होने से पहले, मैं ऑपरेशन कतार के अंदर सभी कार्यों को रद्द करने में सक्षम होना चाहता हूं और फिर परिणामों को रखने वाले दृश्य नियंत्रक को खारिज कर देता हूं।

वह हमेशा काम नहीं करता है।

मुझे AFNetworking के साथ यादृच्छिक समय पर क्रैश हो जाता है, जबकि ASIHTTPRequest के साथ, यह ऑपरेशन निर्दोष रूप से काम कर रहा था। काश मैं कह सकता हूं कि एफ़एन नेटवर्किंग का कौन सा विशिष्ट हिस्सा दुर्घटनाग्रस्त हो रहा है, क्योंकि यह अलग-अलग बिंदुओं पर दुर्घटनाग्रस्त होता रहता है (हालांकि, इनमें से ज्यादातर डीबगर NSRunLoop को इंगित करता है जो एक NSURLConnection ऑब्जेक्ट बनाता है)। इसलिए, AFNetworking को परिपक्व होने की जरूरत है ताकि ASIHTTPRequest के रूप में पूर्ण माना जा सके।

इसके अलावा, ASIHTTPRequests ग्राहक प्रमाणीकरण का समर्थन करता है, जिसमें AFNetworking का अभाव है। इसे लागू करने का एकमात्र तरीका AFHTTPRequestOperation को उप-वर्ग करना और NSURLConnection के प्रमाणीकरण विधियों को ओवरराइड करना है। हालाँकि, यदि आप NSURLConnection के साथ जुड़ना शुरू करते हैं, तो आप ध्यान देंगे कि NSOLConnection को NSOperation आवरण के अंदर रखना और पूर्ण ब्लॉक लिखना इतना कठिन नहीं है क्योंकि यह आपको लगता है और आप यह सोचना शुरू कर देंगे कि आपको 3rd पार्टी लाइब्रेरीज़ को डंप करने से क्या बचा है।

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

मुझे कौन सा पसंद है? य़ह कहना कठिन है। यदि AFNetworking पर्याप्त परिपक्व होता है, तो मैं इसे एएसआई से अधिक पसंद करूंगा। तब तक, मैं मदद नहीं कर सकता, लेकिन एएसआई की प्रशंसा करता हूं, और जिस तरह से यह ओएस एक्स और आईओएस के लिए सभी समय के सबसे अधिक उपयोग किए जाने वाले ढांचे में से एक बन गया।

संपादित करें: मुझे लगता है कि इस उत्तर को अपडेट करने का समय है, क्योंकि इस पोस्ट के बाद चीजें थोड़ी बदल गई हैं।

यह पोस्ट कुछ समय पहले लिखी गई थी, और AFNetworking काफी परिपक्व हो गया है। 1-2 महीने पहले AF ने POST परिचालनों के लिए एक छोटा सा अपडेट पोस्ट किया था जो कि फ्रेमवर्क के बारे में मेरी आखिरी शिकायत थी (एक छोटी सी लाइन में खराबी का कारण यह था कि एकोनस्ट अपलोड AF के साथ विफल हो गए थे लेकिन ASI के साथ ठीक थे)। प्रमाणीकरण AFNetworking के साथ कोई समस्या नहीं है, क्योंकि जटिल प्रमाणीकरण विधियों के लिए आप ऑपरेशन को रद्द कर सकते हैं और अपनी कॉल कर सकते हैं और AFHTTPClient मूल प्रमाणीकरण को केक का एक टुकड़ा बनाता है। AFHTTPClient को उप-वर्ग करके आप थोड़े समय में संपूर्ण सेवा उपभोक्ता बना सकते हैं।

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

मुझे सफलता और असफलता ब्लॉक भी पसंद है। एएसआई में केवल एक पूरा ब्लॉक है (जो वास्तव में NSOperation का पूरा ब्लॉक है)। आपको यह जांचना था कि क्या आपको पूरा करने में त्रुटि हुई है और तदनुसार कार्य करें। जटिल वेब सेवाओं के लिए, आप सभी "ifs" और "elses" में खो सकते हैं; AFNetworking में, चीजें बहुत अधिक सरल और सहज हैं।

एएसआई अपने समय के लिए बहुत अच्छा था, लेकिन एएफ के साथ आप वेब सेवाओं को पूरी तरह से अच्छी तरह से संभालने के तरीके को बदल सकते हैं, और आसानी से स्केलेबल एप्लिकेशन बना सकते हैं। मेरा वास्तव में मानना ​​है कि एएसआई के साथ चिपके रहने का कोई कारण नहीं है, जब तक कि आप आईओएस 3 और उससे नीचे का लक्ष्य नहीं चाहते हैं।


1
+1 बहुत ही गूढ़। शायद यह स्टैकओवरफ्लो पर एक प्रश्न के रूप में आपके क्रैश को पोस्ट करने के लायक है? मुझे अधिक विवरण देखने में रुचि होगी।
जोसेफ

धन्यवाद। जब मेरे पास क्रैश के बारे में ठोस डेटा होगा तो मैं ऐसा करूंगा।
सीएसओटीरीउ

3
क्या स्थिरता का मुद्दा अभी भी एक मुद्दा है?
जोहान कार्लसन

1
कुछ दिनों पहले मेरे द्वारा चलाए गए परीक्षणों के आधार पर प्रारंभिक आंकड़ों पर, नहीं। यह। हालाँकि, फ्रेमवर्क के नवीनतम संस्करण के साथ भी, मेरे पास एक उदाहरण है जो कभी-कभी AFURLConnection के रन लूप पर क्रैश हो जाता है, जब कुछ शर्तों के तहत क्रियाओं की एक श्रृंखला के साथ पर्याप्त जोर दिया जाता है (तुरंत / डेलीकेट / रद्द करें / रद्द करें)। हालांकि यह NSOperation पूर्ण ब्लॉक और NSRunLoop के साथ कुछ करना होगा। मैंने AFNetworking के कार्यान्वयन की जाँच की है और इसके बारे में कोई कारण नहीं खोज सका है।
csotiriou

ASI में एक विफलता ब्लॉक है।
काकोआ

17

बस एक परियोजना को खत्म कर रहा हूं जहां मैं एएसआई के बजाय एएफएन नेटवर्किंग का उपयोग कर रहा हूं। पिछली परियोजनाओं पर एएसआई का उपयोग किया है; यह अतीत में एक बड़ी मदद रही है।

यहाँ पर AFNetworking गायब है (आज के अनुसार) जिसके बारे में आपको पता होना चाहिए:

  • कुछ भी तो नहीं

एएसआई दूर जा रहा है । अब AF का उपयोग करें। यह छोटा है, यह काम करता है, और यह समर्थन जारी रखने वाला है। यह विशेष रूप से एपीआई ग्राहकों के लिए और अधिक तार्किक रूप से आयोजित किया जाता है। इसमें टेबल व्यू में छवियों के अतुल्यकालिक लोडिंग जैसे अक्सर उपयोग किए जाने वाले विशेष मामलों के लिए कई शानदार कक्षाएं हैं।


9
जैसा कि @iwat ने सवाल पर कमेंट्स में बताया है कि AFNetworking मजबूत कैशिंग को याद नहीं कर रहा है। यह सवाल दिलचस्प और प्रासंगिक है, इसलिए "कुछ भी नहीं" गलत जवाब है। इसके अलावा, मैं आपकी भावना से पूरी तरह सहमत हूं, थियो।
केनी विंकर

1
@KennyWinker कृपया उस टिप्पणी थ्रेड में मेरा उत्तर देखें। मुझे यह कहते हुए खुशी हो रही है कि AFNetworking कैश द्वारा डिज़ाइन में नहीं बनता है। बल्कि, कोई भी अपने पसंदीदा- NSURLCacheआधारित समाधान में स्वैप करने के लिए स्वतंत्र है ।
13

1
कुछ भी नहीं - अनुरोधों में मैं प्रॉक्सी का उपयोग कैसे कर सकता हूं?
एलेक्स वोलोवॉय

@AlexVolovoy शायद आप सबसे अच्छा है कि एक नए सवाल के रूप में पूछें
जोशेफ

मैं 'कुछ नहीं' नहीं कहूंगा। कृपया मेरा जवाब नीचे देखें।
बोरिसदिाकुर

4

AFNetworking TLS क्लाइंट प्रमाणीकरण के लिए क्लाइंट सर्टिफिकेट और क्लाइंट सर्टिफिकेट का समर्थन नहीं करता है।

हम - (void)connection:(NSURLConnection *)connection didReceiveAuthenticationChallenge:(NSURLAuthenticationChallenge *)challengeAFURLConnectionOperation के एक उपवर्ग में विधि के साथ ऐसा कर सकते हैं लेकिन यह उतना आसान नहीं है।


5
अब आप और इसके उपवर्ग setAuthenticationChallengeBlock:पर कर सकते हैं AFURLConnectionOperation, और किसी भी प्रमाणीकरण चुनौतियों को संभालने के लिए तर्क में पास कर सकते हैं , बिना उपवर्ग के।
मैट

2

मैं थोड़ी देर के लिए ASI * का उपयोग कर रहा हूं और मुझे ASI के फाइलअप लोड दृष्टिकोण से बिल्कुल प्यार है, और हालांकि मैं AFNetworking में कूदने के लिए उत्साहित हूं, AfNetworking में फाइलअप लोड समर्थन ASI * की तुलना में उपयोग करना उतना आसान नहीं है।


2

अब तक मैं यह पता नहीं लगा सका कि एक तुल्यकालिक POST अनुरोध करते समय AFNetworking के साथ एक टाइमआउट कैसे सेट किया जाएअद्यतन: मैं अंत में समझ में आया: https://stackoverflow.com/a/8774125/601466
अब AFNetworking पर स्विच कर रहा हूं :]

==================

Apple एक POST के लिए समय समाप्त हो जाता है, इसे 240 सेकंड में सेट कर रहा है (यदि यह कम हो गया था तो 240 सेकंड), और आप इसे बदल नहीं सकते। ASIHTTP के साथ आप बस एक टाइमआउट सेट करते हैं और यह काम करता है।

एक तुल्यकालिक POST अनुरोध के साथ एक कोड उदाहरण:

NSDictionary *params = [NSDictionary dictionaryWithObjectsAndKeys:
                                @"doSomething", @"task",
                                @"foo", @"bar",
                                nil];

AFHTTPClient *httpClient = [[AFHTTPClient alloc] initWithBaseURL:[NSURL URLWithString:baseURL]];

NSMutableURLRequest *request = [httpClient requestWithMethod:@"POST" path:requestURL parameters:params];
[httpClient release];

AFHTTPRequestOperation *operation = [[[AFHTTPRequestOperation alloc] initWithRequest:request] autorelease];
[operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {}
failure:^(AFHTTPRequestOperation *operation, NSError *error) {
    NDLog(@"fail! %@", [error localizedDescription]);
}];

NSOperationQueue *queue = [[[NSOperationQueue alloc] init] autorelease];
[[AFNetworkActivityIndicatorManager sharedManager] incrementActivityCount];

[queue addOperation:operation];
[queue waitUntilAllOperationsAreFinished]; // Stuck here for at least 240 seconds!

[[AFNetworkActivityIndicatorManager sharedManager] decrementActivityCount];
if (![[operation responseString] isEqualToString:@""]) {
    return [operation responseString];
}

return nil;

मैंने यहां टाइमआउट सेट करने की कोशिश की, लेकिन कुछ भी काम नहीं आया। यह समस्या मुझे AFNetworking की ओर पलायन करने से रोकती है।

यहाँ भी देखें: AFNetworking के साथ टाइमआउट कैसे सेट करें


टाइमआउट के बारे में आपकी बात अच्छी है, साझा करने के लिए धन्यवाद! मुझे समझ में नहीं आता है कि यह किस तरह से सिंकदर से अनुरोध करने से संबंधित है, क्या आप उस पर विस्तार कर सकते हैं?
जोसेफ

@ जोसेफ आप सही हैं। बेशक कभी-कभी आपको अतुल्यकालिक अनुरोध करते समय एक टाइमआउट सेट करने की भी आवश्यकता होती है। मैंने अपने उत्तर को अपडेट कर दिया है:]
बोरिसडाकुर

Apple ने टाइमआउट के साथ इस मुद्दे को तय किया। Invalval 240 सेकंड से कम नहीं हो पा रहा है, हालांकि यह अभी भी एक मुद्दा है, भले ही आप टाइमआउटइंटरवल सेट करते हों, अनुरोध किसी भी तरह से इसका सम्मान नहीं करता है।
जैस्पर

2

AFNetwork में बड़ी फ़ाइलों को अपलोड करने की क्षमता का अभाव है। यह मानता है कि फ़ाइल की सामग्री रैम में है। ASI केवल डिस्क से फ़ाइल सामग्री को स्ट्रीम करने के लिए पर्याप्त स्मार्ट था।


0

ASIHTTP में मुझे लगा कि मैं व्यक्तिगत अनुरोधों के लिए एक उपयोगकर्ता नाम शब्दकोश संलग्न कर सकता हूं। जहाँ तक मैं देख रहा हूँ कि इसमें कोई प्रत्यक्ष सहयोग नहीं है AFHTTPRequestOperation। क्या कोई अभी तक एक सुंदर समाधान के साथ आया है? पाठ्यक्रम के तुच्छ उपवर्ग के अलावा।


2
जवाब में सवाल न पूछें, रिपोट होने की आपकी संभावना बहुत कम है। इसके बजाय टिप्पणी या नए प्रश्न का उपयोग करें;)
मीकल

-8

AFNetworking "ब्लॉक" के साथ काम करता है जो ASIHTTPRequest जैसे प्रतिनिधियों के साथ काम करने की तुलना में मेरे लिए अधिक स्वाभाविक है।

जावास्क्रिप्ट में अनाम फ़ंक्शन के साथ काम करना ब्लॉक के साथ काम करना।


सच है, लेकिन मेरी राय में यह ASIHTTPRequest के साथ विकसित करने के लिए मुख्य दृष्टिकोण नहीं है
torhector2

7
ऐसा केवल इसलिए है क्योंकि ASIHTTP के लिखे जाने के बाद ब्लॉक आए थे, मैं हमेशा ASI के साथ ब्लॉक का उपयोग करता हूं, कभी प्रतिनिधि नहीं।
हाइपरक्रिप्ट क्रॉप
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.