HttpClient
को कई कॉल के लिए फिर से उपयोग करने के लिए डिज़ाइन किया गया है । यहां तक कि कई धागों में भी। HttpClientHandler
साख और कुकीज़ है कि पुन: उपयोग किए कॉल भर में करने का इरादा कर रहे हैं। एक नया HttpClient
उदाहरण होने से उस सभी सामान को फिर से सेट करना पड़ता है। यह भीDefaultRequestHeaders
संपत्ति में कई कॉल के लिए इच्छित गुण हैं। प्रत्येक अनुरोध पर उन मानों को रीसेट करने से बिंदु को हराया जाता है।
एक अन्य प्रमुख लाभ क्रॉस कटिंग चिंताओं को लागू करने के लिए अनुरोध / प्रतिक्रिया पाइपलाइन में HttpClient
जोड़ने की क्षमता है HttpMessageHandlers
। ये लॉगिंग, ऑडिटिंग, थ्रोटलिंग, रीडायरेक्ट हैंडलिंग, ऑफलाइन हैंडलिंग, मेट्रिक्स कैप्चरिंग के लिए हो सकते हैं। हर तरह की अलग चीजें। यदि प्रत्येक अनुरोध पर एक नया HttpClient बनाया जाता है, तो इन सभी संदेश संचालकों को प्रत्येक अनुरोध पर सेटअप करने की आवश्यकता होती है और किसी भी तरह से किसी भी स्तर की स्थिति जो इन हैंडलर्स के अनुरोधों के बीच साझा की जाती है, को भी प्रदान करने की आवश्यकता होती है।
जितना अधिक आप सुविधाओं का उपयोग करते हैं HttpClient
, उतना ही आप देखेंगे कि मौजूदा उदाहरण का पुन: उपयोग करना समझ में आता है।
हालांकि, मेरी राय में, सबसे बड़ा मुद्दा यह है कि जब एक HttpClient
वर्ग का निपटान किया जाता है, तो वह निपटता है HttpClientHandler
, जो तब जबरन उन TCP/IP
कनेक्शनों के पूल में कनेक्शन को बंद कर देता है जो उसके द्वारा प्रबंधित किया जाता है ServicePointManager
। इसका मतलब यह है कि नए के साथ प्रत्येक अनुरोध को HttpClient
नए TCP/IP
कनेक्शन को फिर से स्थापित करने की आवश्यकता होती है ।
मेरे परीक्षणों से, LAN पर सादे HTTP का उपयोग करके, प्रदर्शन हिट काफी नगण्य है। मुझे इस पर संदेह है क्योंकि एक अंतर्निहित टीसीपी रखवाली है जो HttpClientHandler
इसे बंद करने की कोशिश करने पर भी कनेक्शन खुला रखती है।
इंटरनेट पर जाने के अनुरोध पर, मैंने एक अलग कहानी देखी है। मैंने हर बार अनुरोध को दोबारा खोलने के कारण 40% प्रदर्शन देखा है।
मुझे लगता है कि एक HTTPS
कनेक्शन पर हिट और भी बदतर होगी।
मेरी सलाह है कि प्रत्येक विशिष्ट एपीआई के लिए अपने एप्लिकेशन के जीवनकाल के लिए HttpClient का एक उदाहरण रखें, जिससे आप कनेक्ट होते हैं।
Stopwatch
इसे बेंचमार्क करने के लिए क्लास का उपयोग कर सकते हैं , हालाँकि। मेरा अनुमान यह होगा कि एकल होना अधिक मायने रखता हैHttpClient
, यह मानते हुए कि उन सभी उदाहरणों को एक ही संदर्भ में उपयोग किया जाता है।