2013-11-28 27 views
16

Tôi đang sử dụng Thành phần Apache của Apache để thực hiện tương tác http. Tôi cần điều chỉnh ứng dụng khách http của mình. Với mục đích này, tôi có hai tham số: thời gian chờ kết nối và thời gian chờ yêu cầu kết nối. Trong tài liệu thư viện và trong mã nguồn (không tìm thấy bình luận) Tôi không tìm thấy định nghĩa của thuật ngữ này. Tôi cần phải biết chính xác chúng là gì. Có thể họ đã được xác định trong tài liệu giao thức HTTP nhưng tôi không thể tìm thấy nó. Vì vậy, câu hỏi của tôi là ý nghĩa của hai thuật ngữ này và cách chúng khác biệt với nhau.Thời gian chờ kết nối và kết nối

+0

Hãy thử tìm kiếm chúng mà không cần từ khóa apache hoặc java: http://en.wikipedia.org/wiki/Timeout_(computing) –

Trả lời

19

HttpClient có một cách để thiết lập kết nối và ổ cắm timeout (setConnectionTimeout()setTimeout()) theo http://hc.apache.org/httpclient-3.x/apidocs/org/apache/commons/httpclient/HttpClient.html

Connection timeout là thời gian chờ đến khi kết nối với máy chủ được thiết lập.

Socket timeout là thời gian hết giờ để nhận dữ liệu (thời gian chờ của ổ cắm).

Ví dụ:

Giả sử bạn trỏ trình duyệt truy cập trang web. Nếu máy chủ không anwser trong X giây, thời gian chờ kết nối sẽ xảy ra. Nhưng nếu nó thiết lập kết nối, thì máy chủ sẽ bắt đầu xử lý kết quả cho trình duyệt. Nếu nó không kết thúc quá trình xử lý này trong Y giây, thời gian chờ của ổ cắm sẽ xảy ra.

+6

Cảm ơn bạn đã trả lời, nhưng tôi vẫn gặp sự cố. Đây là trình xây dựng cấu hình yêu cầu http://hc.apache.org/httpcomponents-client-4.3.x/httpclient/apidocs/org/apache/http/client/config/RequestConfig.Builder.html và nó có ba phương thức setConnectionRequestTimeout, setConnectTimeout , setSocketTimeout (và không có bình luận!). Vì vậy, tôi vẫn không biết chính xác từng phương pháp và phương pháp nào tôi nên sử dụng. – mvb13

+18

Ok, cuối cùng tôi thấy rằng getConnectionRequestTimeout trả về imeout bằng mili giây được sử dụng khi yêu cầu kết nối từ trình quản lý kết nối. Tôi đoán rằng quản lý kết nối là lớp thư viện apache-httpcomponents, vì vậy tôi sẽ không sử dụng nó. Tôi sẽ sử dụng setConnectionTimeout() và setTimeout(). – mvb13

4

Đối với hậu thế, trong HttpClient 4.X.X, sau đây là cách bạn xây dựng ứng dụng khách sử dụng một số connectTimeoutMillisrequestTimeoutMillis cụ thể.

HttpClientBuilder clientBuilder = HttpClientBuilder.create(); 
RequestConfig.Builder requestBuilder = RequestConfig.custom(); 
requestBuilder = requestBuilder.setConnectTimeout(connectTimeoutMillis); 
requestBuilder = requestBuilder.setConnectionRequestTimeout(requestTimeoutMillis); 
clientBuilder.setDefaultRequestConfig(requestBuilder.build()); 
CloseableHttpClient httpClient = clientBuilder.build(); 
... 

Btw, javadocs cho mã này hút. Cố gắng tìm ra bằng tay cách sử dụng trình tạo cấu hình. Holy crap.

Các vấn đề liên quan