java - अपाचे HttpCompords HttpClient टाइमआउट




apache-httpclient-4.x apache-httpcomponents (4)

मैं httpcompents httpclient में कनेक्शन टाइमआउट कैसे सेट करूं? मैंने प्रलेखन यहां पाया है: http://hc.apache.org/httpcomponents-client-ga/tutorial/html/connmgmt.html लेकिन यह स्पष्ट नहीं है कि ये पैरामीटर वास्तव में कैसे सेट किए जाते हैं।

इसके अलावा, SO_TIMEOUT और CONNECTION_TIMEOUT बीच अंतर की व्याख्या सहायक होगी।


@Jontro से उत्तर सही है, लेकिन यह हमेशा अच्छा होता है कि यह कैसे करना है पर एक कोड स्निपेट है। इसे करने के दो तरीके हैं:

संस्करण 1: इनमें से प्रत्येक पैरामीटर के लिए 10 सेकंड का समय निर्धारित करें:

HttpClient httpclient = new DefaultHttpClient();
// this one causes a timeout if a connection is established but there is 
// no response within 10 seconds
httpclient.getParams().setParameter(CoreConnectionPNames.SO_TIMEOUT, 10 * 1000);

// this one causes a timeout if no connection is established within 10 seconds
httpclient.getParams().setParameter(CoreConnectionPNames.CONNECTION_TIMEOUT, 10 * 1000);

// now do the execute:
HttpGet httpget = new HttpGet(URL);
HttpResponse response = httpclient.execute(httpget);



संस्करण 2: इन मापदंडों में से प्रत्येक के लिए 10 सेकंड का समय निर्धारित करें:

HttpParams params = new BasicHttpParams();
HttpConnectionParams.setConnectionTimeout(params, 10 * 1000);
HttpConnectionParams.setSoTimeout(params, 10 * 1000);

HttpClient httpclient = new DefaultHttpClient(params);
HttpGet httpget = new HttpGet(URL);
HttpResponse response = httpclient.execute(httpget);

Apache Http क्लाइंट के संस्करण 4.3 में कॉन्फ़िगरेशन को फिर से सक्रिय किया गया था। नया तरीका इस तरह दिखता है:

RequestConfig.Builder requestBuilder = RequestConfig.custom();
requestBuilder.setConnectTimeout(timeout);
requestBuilder.setConnectionRequestTimeout(timeout);

HttpClientBuilder builder = HttpClientBuilder.create();     
builder.setDefaultRequestConfig(requestBuilder.build());
HttpClient client = builder.build();

मैंने java.net.SocketInputStream.socketRead0 समस्या को हल करने के लिए पूरे अनुरोध के लिए एक कठिन समय निर्धारित किया है।

private static final ScheduledExecutorService SCHEDULED_EXECUTOR = Executors.newSingleThreadScheduledExecutor()

HttpGet request = new HttpGet("http://www.example.com")
final Runnable delayedTask = new Runnable() {
    @Override
    public void run() {
        request.abort()
    }
}
SCHEDULED_EXECUTOR.schedule(delayedTask, 100000, TimeUnit.MILLISECONDS)

खंड 2.5 में आप CONNECTION_TIMEOUT पैरामीटर सेट करने का एक उदाहरण देखते हैं।

CONNECTION_TIMEOUT प्रारंभिक कनेक्शन की प्रतीक्षा करने का समय है और SO_TIMEOUT वह टाइमआउट है जिसका आप कनेक्शन स्थापित होने के बाद पैकेट पढ़ते समय प्रतीक्षा करते हैं।





apache-httpcomponents