2010-07-18 25 views
5

के रूप में उपयोग के लिए कॉन्फ़िगर करना मैं अपने क्लाइंट-साइड कोड के लिए रीस्टलेट को कॉन्फ़िगर कर रहा हूं। मैं रीस्टलेट 2 और एचटीपी क्लाइंट 4 का उपयोग कर रहा हूं। मैंने एक्सटेंशन जार और एचटीपी क्लाइंट जार को बिल्ड पथ में जोड़ा और ऐसा लगता है कि यह काम करता है।एचटीपी क्लाइंट को रीसेट क्लाइंट

हालांकि, मुझे नहीं पता कि इसे विस्तार से कैसे कॉन्फ़िगर किया जाए। मैं मैन्युअल रूप से कोई क्लाइंट नहीं बनाता, इसके बजाय मैं इंटरैक्शन के लिए ClientResource एस का उपयोग करता हूं, जो एकमात्र ऐसा हिस्सा है जहां मैं सीधे रेस्टलेट का उपयोग करता हूं। ग्राहकों के ठोस तात्कालिकता ढांचे के कार्यान्वयन में छिपा हुआ प्रतीत होता है। मुझे कुछ संकेत मिले कि मैं ग्राहकों को कैसे कॉन्फ़िगर कर सकता हूं, लेकिन वे सभी को Restlet 1.x के लिए लिखा गया था।

विस्तार में, मैं निम्नलिखित भागों कॉन्फ़िगर करना चाहते हैं: क्लाइंट के अनुरोध के लिए

  • बदलें उपयोगकर्ता एजेंट। clientResource.getClientInfo().setAgent(…) काम नहीं करता है।
  • प्रति होस्ट समानांतर कनेक्शन की संख्या बढ़ाएं।
  • प्रति होस्ट लगातार कनेक्शन और पूलिंग सक्षम करें। जाहिर है, अब तक रीसेट करें ClientResource प्रति नया कनेक्शन बनाता है, जो वास्तव में कुशल नहीं है।

बेशक, मुझे पहले से ही HttpClientHelper पर एक नज़र था, लेकिन मुझे नहीं पता कि यह कहां और कैसे जोड़ना है। इसके लिए प्रलेखन की खोज पहले ही हो चुकी है, लेकिन कोई हिट नहीं है।

मदद के लिए धन्यवाद!

+2

मैं इस सवाल को रीस्टलेट-चर्चा मेलिंग सूची (http://restlet.tigris.org/ds/viewForums.do) पर पोस्ट करने का सुझाव दूंगा। Restlet 2.0 अगले कुछ दिनों में जारी किया जाना चाहिए, इसलिए यदि कोई बग है तो रिपोर्टिंग के लायक हो सकते हैं। – Bruno

+0

मैं ब्रूनो से सहमत हूं। यह देखना अच्छा होगा कि रेस्टलेट डेवलपर्स के विचार इस बारे में क्या हैं। आप अक्षमता के बारे में सही हैं 'डिफ़ॉल्ट' क्लाइंट रिसोर्स 'व्यवहार और थ्रेड-सुरक्षा समस्या इसे बढ़ा देती है। – laz

+0

ऐसा लगता है कि सवाल सामने आया है: http://restlet.tigris.org/ds/viewMessage.do?dsForumId=4447&dsMessageId=2635381 – laz

उत्तर

4

सबसे पहले, यह सुनिश्चित करने के लिए कि आप रीसेटलेट कनेक्शन के लिए अपाचे के एचटीपी क्लाइंट का उपयोग करते हैं, आपको क्लासपाथ पर org.restlet.ext.httpclient.jar होना चाहिए। दूसरा, क्या आप ClientResource के निर्माता में Context पास कर रहे हैं?

final Context context = new Context(); 
    context.getParameters().set("maxConnectionsPerHost", "20"); 

    final ClientResource requestResource = new ClientResource(context, "http://localhost:8182/request"); 
    requestResource.getClientInfo().setAgent("Example-Client/1.0"); 

कि maxConnectionsPerHost स्थापित करने में रुचि रखते हैं का ख्याल रखता है इसके अलावा, बुला setAgent काम कर रहा था मेरे लिए के रूप में उम्मीद: आप की आवश्यकता होगी यदि नहीं।। मुझे यकीन नहीं है कि आपके उदाहरण में समस्या क्या हो सकती है।

लगातार कनेक्शन के संबंध में, ऐसा लगता है कि HttpClient आपके लिए इसका ख्याल रखता है। रीस्टलेट HttpClient के ThreadSafeClientConnManager का वर्णन here का वर्णन करता है। यह उस लिंक पर लगातार कनेक्शन के लिए समर्थन का उल्लेख करता है। ऐसा लगता है कि यह वस्तु आपकी पूलिंग चिंताओं का भी ख्याल रखेगी। इसका लाभ उठाने के लिए आप ClientResource के उसी उदाहरण का पुन: उपयोग करना चाहेंगे। मुझे तुरंत ClientResource की थ्रेड-सुरक्षा नीति के बारे में पता नहीं है, लेकिन मुझे उम्मीद है कि यह थ्रेड-सुरक्षित है।

+0

आपके उत्तर के लिए धन्यवाद। दुर्भाग्यवश, उपयोगकर्ता एजेंट को सेट करना अभी भी काम नहीं करता है और http://www.restlet.org/documentation/2.0/jse/api/org/restlet/resource/ClientResource।एचटीएमएल का कहना है कि क्लाइंट रिसोर्स को कई धागे के बीच साझा करने के लिए डिज़ाइन नहीं किया गया है, जो वास्तव में खराब है। –

+1

मुझे सिर्फ जवाडोक पढ़ना चाहिए था! मुझे कुछ दिलचस्प लगता है जो 'क्लाइंट रिसोर्स' का उपयोग करने का इरादा दुष्प्रभाव नहीं हो सकता है। 'क्लाइंट रिसोर्स' उदाहरण के साथ अनुरोध करने के बाद, 'requestResource.getNext()' के परिणाम कॉल करने के लिए उपयोग किए गए 'क्लाइंट' ऑब्जेक्ट को वापस कर देंगे। आप उस ऑब्जेक्ट के संदर्भ को सहेज सकते हैं और 'setNext (अगला वर्दी)' प्रदान करके भविष्य में 'क्लाइंट रिसोर्सेज' पर इसका पुन: उपयोग कर सकते हैं। चूंकि 'क्लाइंट' सभी HttpClient ऑब्जेक्ट्स को समाहित करता है, इसलिए आप उन सभी ऑब्जेक्ट्स को पुनर्निर्मित करने पर सहेजते हैं। मुझे यकीन नहीं है कि उस दृष्टिकोण का कितना दुर्व्यवहार होगा! – laz

+0

वह चाल वास्तव में कुछ समवर्ती अनुरोधों के लिए काम करती है। यदि अनुरोधों की संख्या बढ़ जाती है और कनेक्शन से अधिक अनुरोध हैं, तो यह कुछ आंतरिक अपवादों को यादृच्छिक रूप से फेंकना शुरू कर देता है। तो मैं एक आधिकारिक समाधान पसंद करेंगे। फिर भी आपके संकेत के लिए धन्यवाद। –

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