2015-12-08 84 views
0

Apache HttpClient是否向同一臺服務器批量請求以減少往返時間?Apache HttpClient批量請求?

+0

據我所知,「批處理」不是HTTP 1或1.1術語。你能確定你的意思是「批量請求」嗎? (HTTP 1.1流水線?連接keepalive /重用?/ https://tools.ietf.org/id/draft-snell-http-batch-00.html?) – GPI

+0

@Pinch你檢查我的答案插入「連接:保持「活着」標題? – ferit

回答

1

在HTTP方面沒有稱爲批處理請求的術語。但是,如果你的意思是,通過使用相同的TCP連接,這樣避免了額外的往返時間爲每個請求,這就是所謂的保持活躍

在HTTP1.1發送請求,默認是保持活動的連接,因此你不需要做任何事情。服務器決定是否保持連接存活。

在HTTP1.0中,您必須添加保持活動頭以要求保持連接活着。

這是Apache HttpClient插入Connection:keep-alive標頭的示例。

HttpClient client = HttpClients.custom().build(); 
HttpUriRequest request = RequestBuilder.get().setUri(SAMPLE_URL) 
    .setHeader(HttpHeaders.CONNECTION, "keep-alive").build(); 
client.execute(request); 

它的工作原理就像這樣:當你發送一個HTTP請求時,你需要在服務器和你之間建立一個TCP連接。這需要一個往返時間,之後您可以發送您的請求。

發送請求後,有兩個選項可以關閉TCP連接,或不關閉。如果關閉TCP連接,服務器會釋放分配給您的資源(適用於服務器),但是當您想發送另一個請求時,您需要打開一個新連接。如果不關閉連接,則會避免額外的RTT,但連接處於打開狀態時,其他用戶無法使用服務器的資源。