java - Apache HttpClient API में SetConnectionTimeout, setSoTimeout और "http.connection-manager.timeout" में क्या अंतर है




apache-httpclient-4.x httpconnection (3)

Apache HTTP क्लाइंट साइट पर कनेक्शन प्रबंधन प्रलेखन में विस्तृत विवरण प्रदान किया गया है।

CoreConnectionPNames.SO_TIMEOUT = 'http.socket.timeout': मिलीसेकंड में सॉकेट टाइमआउट (SO_TIMEOUT) को परिभाषित करता है, जो डेटा के इंतजार का समयबाह्य है या अलग-अलग, दो लगातार डेटा पैकेटों के बीच एक अधिकतम अवधि निष्क्रियता को निर्धारित करता है)। शून्य के एक टाइमआउट मान को एक अनंत टाइमआउट के रूप में समझा जाता है। यह पैरामीटर java.lang.Integer प्रकार के मान की अपेक्षा करता है। यदि यह पैरामीटर सेट नहीं है, तो रीड ऑपरेशंस टाइम आउट नहीं होंगे (अनंत टाइमआउट)।

CoreConnectionPNames.CONNECTION_TIMEOUT = 'http.connection.timeout': एक कनेक्शन स्थापित होने तक मिलीसेकंड में टाइमआउट निर्धारित करता है। शून्य के एक टाइमआउट मान को एक अनंत टाइमआउट के रूप में समझा जाता है। यह पैरामीटर java.lang.Integer प्रकार के मान की अपेक्षा करता है। यदि यह पैरामीटर सेट नहीं है, तो कनेक्ट ऑपरेशन टाइम आउट (अनंत समय समाप्त) नहीं होगा।

कनेक्शन प्रबंधक टाइमआउट (http.connection-manager.timeout) - कनेक्शन प्रबंधक / पूल से कनेक्शन की प्रतीक्षा करने का समय

सिर्फ रिकार्ड के लिए

HttpParams httpParams = httpClient.getParams();
httpParams.setParameter(CoreConnectionPNames.CONNECTION_TIMEOUT, timeout * 1000);
httpParams.setParameter(CoreConnectionPNames.SO_TIMEOUT, timeout * 1000);

वैकल्पिक तरीका है

HttpParams httpParams = httpClient.getParams();
HttpConnectionParams.setConnectionTimeout(httpParams, timeout * 1000);
HttpConnectionParams.setSoTimeout(httpParams, timeout * 1000);

तीनों में क्या अंतर है (टिप्पणी के रूप में चिह्नित):

MultiThreadedHttpConnectionManager connManag =  new MultiThreadedHttpConnectionManager();
HttpConnectionManagerParams managParams = connManag.getParams();

managParams.setConnectionTimeout(connectiontimeout); // 1
managParams.setSoTimeout(sotimeout); //2

HttpMethodBase baseMethod = null;

try {
  HttpClient client = new HttpClient(connManag);
  client.getParams().setParameter("http.connection-manager.timeout", poolTimeout); //3

  baseMethod = new GetMethod(…);
  int statusCode = client.executeMethod(…);

  
}
catch (ConnectTimeoutException cte ){
  //Took too long to connect to remote host
}
catch (SocketTimeoutException ste){
  //Remote host didn’t respond in time
}
catch (Exception se){
  //Some other error occurred
}
finally {
  if (baseMethod != null)
    baseMethod.releaseConnection();
}

1. setConnectionTimeout - यदि यह कनेक्शन स्थापित होने तक टाइमआउट निर्धारित करता है।

2. setSoTimeout - यदि यह दो लगातार पैकेटों के बीच निष्क्रियता या समय के अंतर को निर्धारित करता है,

फिर नीचे वाला क्या करता है:

3. "http.connection-manager.timeout"


यह अनुक्रम आरेख मदद कर सकता है।


सरल शब्दों में:

  • कनेक्शन टाइम आउट: आपके एप्लिकेशन की उस समय की सीमा का इंतजार होता है जब सर्वर के साथ कनेक्शन स्थापित करने का प्रयास किया जाता है और यह करने में सक्षम नहीं होता है (पता गलत है, या सर्वर नीचे है आदि ...)
  • सॉकेट टाइम आउट: सर्वर से कनेक्ट होने के बाद आपके एप्लिकेशन की समय सीमा की प्रतीक्षा होती है लेकिन फिर भी प्रतिक्रिया का इंतजार होता है (उदाहरण के लिए सर्वर हैंग होने से देरी हो सकती है)
  • कनेक्शन प्रबंधक का समय समाप्त हो गया: जब अनुरोध कतार में होता है तो समय की सीमा इंतजार करती है कि पूल में किसी एक अनुरोध को मुक्त किया जाए। दूसरे शब्दों में, HTTP में हमारे पास अधिकतम आकार के साथ कनेक्शन का एक पूल है। जब आवेदन पर भार हो तो पूल शायद भरा हुआ हो और किसी भी नए अनुरोध को पूल से दूसरे अनुरोध के समाप्त होने तक प्रतीक्षा करनी चाहिए।




httpconnection