HttpClient 間接使用 Socket 通訊。 HTTP 協議建立在 TCP/IP 之上,Java 的 `Socket` 實作了 TCP 通訊;HttpClient 封裝了 HTTP 協議細節,底層透過 `Socket` 建立連線、傳輸資料。
應用層:HttpClient (HTTP 協議封裝)
↓
傳輸層:TCP (可靠傳輸)
↓
網路層:IP (路由寻址)
↓
Java 實作:java.net.Socket (TCP 程式介面)
PoolingHttpClientConnectionManager cm = new PoolingHttpClientConnectionManager();
cm.setMaxTotal(200); // 總連線上限
cm.setDefaultMaxPerRoute(50); // 每路由上限
RequestConfig config = RequestConfig.custom()
.setConnectTimeout(5000)
.setSocketTimeout(30000)
.setConnectionRequestTimeout(1000)
.build();
CloseableHttpClient client = HttpClients.custom()
.setConnectionManager(cm)
.setDefaultRequestConfig(config)
.evictIdleConnections(30, TimeUnit.SECONDS) // 定期清理閒置連線
.build();
理解 HttpClient 底層走 Socket/TCP,有助於調優連線池、排查連線洩漏、設計高效的 HTTP 客戶端架構。