2008-09-25 12 views
11

doGetConnection() को कॉल करते समय httpclient का मेरा कार्यान्वयन कभी-कभी अपवाद फेंकता है। हालांकि, मेरे पास निम्नलिखित टाइमआउट सेटअपाचे एचटीपी क्लाइंट के साथ, मेरा कनेक्शन टाइमआउट क्यों काम नहीं कर रहा है?

_moHttpClient.setHttpConnectionFactoryTimeout(30000); 

ऐसा लगता है कि मेरा टाइमआउट नहीं उठाया जा रहा है। वहाँ कहीं और मैं इस व्यवहार नहीं करता है सुनिश्चित करने के लिए समय समाप्त निर्धारित करने की आवश्यकता है फिर से घटित

उत्तर

7
HttpConnectionManagerParams cmparams = new HttpConnectionManagerParams(); 
    cmparams.setSoTimeout(10000); 
    cmparams.setTcpNoDelay(true); 
    HttpConnectionManager manager = new SimpleHttpConnectionManager(); 
    manager.setParams(cmparams); 
    params = new HttpClientParams(); 
    params.setSoTimeout(5000); 
    client = new HttpClient(params, manager); 

मुझे आश्चर्य है कि क्यों मैं दो अलग अलग SoTimeouts सेट है। हो सकता है कि मैं यह पता लगाने की कोशिश कर रहा था कि वास्तव में कौन सा सक्रिय था, क्योंकि जब मैंने इसका इस्तेमाल किया था तो मुझे वही समस्याएं थीं।

उपरोक्त हमारे स्थान पर लाइव कोड में है, लेकिन मैं यह नहीं कह सकता कि यह काम करता है क्योंकि यह सही है, या क्योंकि प्रदाता मेरे ऊपर मुस्कुरा रहा है (और दूसरा अंत आमतौर पर हमेशा उपलब्ध होता है)।

4

cmparams.setSoTimeout (10000);

यह डिफ़ॉल्ट रूप से सभी HttpClient के लिए है।

params.setSoTimeout (5000);

और यह एक विशेष httpclient के लिए है।

10

आपको किस अपवाद को फेंक दिया जा रहा है?

भूलें कि आपके पास दो समय बदलने/चेक करने के लिए टाइमआउट हैं। HttpConnectionParams

setConnectionTimeout() 
setSoTimeout() 

ताकि आप नियंत्रित कर सकते हैं कि आप कितने समय सर्वर से कनेक्शन के लिए प्रतीक्षा करें, और सॉकेट पर लंबी कार्यवाही बाहर समय से पहले ले जा सकते हैं कि कैसे से।

+0

डॉक्स इंगित करते हैं कि SO_TIMEOUT अंतिम प्राप्त टीसीपी पैकेट के बाद सर्वर को उत्तरदायी नहीं होने का अधिकतम समय है। http://hc.apache.org/httpcomponents-core-ga/httpcore/apidocs/org/apache/http/params/CoreConnectionPNames.html#SO_TIMEOUT –

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