2012-01-24 10 views
7

में अतुल्यकालिक HTTP अनुरोध कैसे इंतजार किए बिना जावा में भेजने के लिए अतुल्यकालिक HTTP GET/पोस्ट अनुरोध/प्रतिक्रिया पढ़ने? मैं नहीं चाहता कि किसी भी तीसरे पक्ष के पुस्तकालयों का उपयोग करना चाहते ..जावा

उत्तर

4

पर एक नज़र लेने के लिए आप सब पर प्रतिक्रिया पढ़ने में रुचि नहीं कर रहे हैं चाहते हो सकता है, तो तुम सिर्फ करने के लिए उपयोग कर सकते हैं URL.openStream() एक कनेक्शन बनाएं और फिर सॉकेट को तुरंत बंद करें (या इसे अनदेखा करें और इसे समय दें, अगर आपको सर्वर का मतलब लगता है)। यह सख्ती से असीमित नहीं है, लेकिन यह किसी भी दृष्टिकोण से काफी तेज़ होगा जो सर्वर की प्रतिक्रिया लाने और विश्लेषण करने पर निर्भर करता है।

यह निश्चित रूप से openStream() कॉल को अन्य थ्रेड पर ऑफ़लोड करके, या तो मैन्युअल रूप से या java.util.concurrent में उपलब्ध उपयोगिताओं का उपयोग करके अतुल्यकालिक बना दिया जा सकता है।

+0

URL.openConnection() सर्वर पर HTTP अनुरोध नहीं भेज रहा है। यह कोड ** यूआरएल यूआरएल = नया यूआरएल ("http: // localhost /") है; URL कनेक्शन myURLConnection = url.open कनेक्शन(); myURLConnection.connect(); ** और मैंने अपाचे एक्सेस लॉग देखा है और यह अनुरोध नहीं मिल रहा है। – pavan

+2

@ पावन - आह, मेरी गलती, उपयोग करने के लिए एपीआई वास्तव में 'ओपनस्ट्रीम()' है, न कि 'openConnection() '। 'openConnection()' कनेक्शन ऑब्जेक्ट तैयार करता है, लेकिन वास्तव में सर्वर से कनेक्शन स्थापित नहीं करता है। 'ओपनस्ट्रीम()' कनेक्शन स्थापित करता है और इसके साथ जुड़े 'इनपुटस्ट्रीम' को वापस देता है, जिसे आप तब पढ़ने या बंद करने या अनदेखा करने के लिए स्वतंत्र होते हैं। मैं तदनुसार अपना जवाब संपादित करूंगा। उपरोक्त लिंक पर प्रलेखन से – aroth

2

java.util.concurrent इस्तेमाल किया जा सकता।

आप रुचि रखते तो तीसरे पक्ष के पुस्तकालयों उपयोग कर रहा है आप

Async Http Client

+0

वास्तव में ...! धन्यवाद @ संदीप पाठक! : डी – gumuruh

0

यदि आप जेटी लाइब्रेरी को अपने ऐप में जोड़ना नहीं चाहते हैं तो मैं जेटी एचटीपी क्लाइंट जैसे कुछ का उपयोग करने का सुझाव दूंगा। जेटी के विकी पेज http://wiki.eclipse.org/Jetty/Tutorial/HttpClient से यहां एक अच्छा उदाहरण दिया गया है।

+0

: "प्रेषण() विधि निष्पादन के लिए थ्रेड पूल में एक्सचेंज भेजने के तुरंत बाद लौटती है" - इसलिए, वास्तव में असीमित नहीं है। – kellogs