java - जर्सी-क्लाइंट और अपाचे HTTP क्लाइंट की तुलना कैसे करें?



apache-httpclient-4.x apache-commons-httpclient (1)

इन दोनों चीजों की तुलना शायद सीधे तौर पर नहीं की जानी चाहिए। जर्सी एक रस्ट-क्लाइंट है, जिसमें पूर्ण JAX-RS कार्यान्वयन, स्वच्छ धाराप्रवाह एपीआई और एक शक्तिशाली फिल्टर स्टैक शामिल है। Apache Http क्लाइंट एक HTTP- क्लाइंट है, जो निम्न-स्तरीय विवरणों जैसे टाइमआउट, जटिल प्रॉक्सी मार्गों और कनेक्शन मतदान के प्रबंधन में एकदम सही है। वे आपके प्रोटोकॉल स्टैक के विभिन्न स्तरों पर कार्य करते हैं। जब आप जर्सी का उपयोग कर रहे हैं तो हमेशा किसी प्रकार का HTTP क्लाइंट बैकएंड शामिल होता है। स्पष्ट रूप से बैकएंड को देखते हुए, जर्सी एक डिफ़ॉल्ट बैकएंड के रूप में HttpUrlConnection का उपयोग करेगा।

HttpUrlConnection बैकेंड उदाहरण के साथ जर्सी:

Client client = Client.create();
WebResource webResource = client.resource("http://localhost:8080/path");
ClientResponse response = webResource.accept("application/json")
                                     .get(ClientResponse.class);

Apache Http क्लाइंट बैकएंड उदाहरण के साथ जर्सी:

HttpClient apacheClient = HttpClientBuilder.create().build();
Client client = new Client(new ApacheHttpClient4Handler(apacheClient,
                                                        new BasicCookieStore(),
                                                        true));
WebResource webResource = client.resource("http://localhost:8080/path");
ClientResponse response = webResource.accept("application/json")
                                     .get(ClientResponse.class);

कृपया पिछले उदाहरण में हैंडलर के उपयोग पर ध्यान दें। यह विभिन्न बैकेंड को शामिल करने और उपयोग करने के लिए जर्सी के लिए एक महत्वपूर्ण एकीकरण अमूर्त है। पहला उदाहरण हुड के नीचे गहरे में URLConnectionClientHandler का उपयोग करता है।

प्रदर्शन और विशेषताओं के बारे में बोलते हुए Apache Http क्लाइंट की जर्सी के साथ तुलना करना थोड़ा समझ में आता है। यहाँ विभिन्न जर्सी बैकेंड्स की तुलना करना चाहते हैं, क्योंकि जर्सी केवल एक रैपिंग एपीआई है। मैं अपने स्वयं के अनुभव के आधार पर HttpUrlConnection और Apache Http क्लाइंट के बीच कुछ महत्वपूर्ण अंतरों को उजागर करना चाहता हूं:

HttpUrlConnection

  • कोई बाहरी निर्भरता आवश्यक नहीं है। यह एम्बेडेड या मोबाइल प्लेटफार्मों पर काफी मूल्यवान हो सकता है।
  • हर जगह बहुत अच्छी तरह से प्रलेखित
  • खराब एपीआई डिजाइन किया है। HttpUrlConnection कार्यान्वयन को बनाए रखना और विस्तारित करना मुश्किल है।
  • कई सुविधाएँ JVM गुणों के माध्यम से कॉन्फ़िगर की गई हैं, जिनमें से कुछ रनटाइम के दौरान गैर-पुन: कॉन्फ़िगर करने योग्य हो सकती हैं।
  • कुछ मामलों में टाइमआउट को संभालने में निराशाजनक। आप अलग-अलग टाइमआउट के लिए 10 अलग-अलग जेवीएम गुण सेट कर सकते हैं और फिर भी कुछ परिस्थितियों में अपने कनेक्शन हमेशा के लिए लटका सकते हैं।
  • चूंकि जिंजरब्रेड एंड्रॉइड के लिए एक recommended http क्लाइंट एपीआई है।

Apache Http क्लाइंट

  • 3.X संस्करणों के लिए यह प्रदर्शन कुछ हद तक HttpUrlConnection समान था। संस्करण 4.1 में बहुत सारे प्रदर्शन करामाती हैं और यह समकक्ष की तुलना में बेहतर प्रदर्शन करता है
  • कनेक्शन और डेटा पढ़ने के समय में काफी अच्छा है
  • यह डिजाइन ओपन / बंद सिद्धांत का अनुसरण करता है, इसलिए आप अपने स्वयं के कार्यान्वयन के साथ HTTP प्रसंस्करण के लगभग किसी भी हिस्से को अनुकूलित कर सकते हैं। उदाहरण: पुनर्निर्देशन रणनीतियाँ, पुनरीक्षण रणनीतियाँ, कस्टम कुकी भंडारण, अनुरोधों / प्रतिक्रियाओं के लिए अवरोधक, आदि।
  • जटिल मल्टी-प्रॉक्सी रास्तों के लिए अनुकूलन योग्य मार्ग बिल्डरों के साथ समृद्ध प्रॉक्सी समर्थन प्रदान करता है
  • बॉक्स प्रति रूट कनेक्शन पूल से बाहर है। यह एक अच्छा प्रदर्शन लाभ दे सकता है यदि SSL / TLS का उपयोग किया जाता है, विशिष्ट रूप से हार्डवेयर PKCS # 11 टोकन शामिल हैं। HttpUrlConnection में एक आंतरिक पूलिंग भी है, लेकिन आपके पास पूल को जांचने के लिए कोई मॉनिटरिंग सुविधा नहीं है या पूल को अनुकूलित करने के लिए कोई उपकरण नहीं है।
  • विस्तृत लॉगिंग सुविधाएँ

ध्यान रखें, यदि आपके पास उपयुक्त com.sun.jersey.api.client.ClientHandler कार्यान्वयन है, तो जर्सी के साथ अन्य बैकेंड (जैसे गैर-अवरुद्ध ग्राहकों के लिए) का उपयोग करना संभव है।

सबसे पहले, मैं यहां एक लौ-युद्ध शुरू करने की कोशिश नहीं कर रहा हूं। मैं जर्सी को पर्याप्त रूप से अच्छी तरह से जानता हूं, लेकिन शायद ही कभी httpclient का इस्तेमाल किया हो।

जर्सी-क्लाइंट और अपाचे के httpclient के बीच मुख्य अंतर क्या हैं? किन क्षेत्रों में एक दूसरे से बेहतर है? कहीं एक अच्छा तुलना चार्ट है? कौन सी बड़ी फ़ाइलों (2048 एमबी) के साथ बेहतर प्रदर्शन करती है?

आपकी टिप्पणियों के लिए बहुत, बहुत धन्यवाद!





jersey-client