HTTP keep-alive 长连接和连接池

FreeGuideOnline 最新 2026-07-09

nginx upstream backend { server 10.0.0.1:8080; server 10.0.0.2:8080; keepalive 32; # 每个 worker 进程保持的空闲连接数 keepalive_timeout 60s; # 空闲连接保持时间 keepalive_requests 1000;# 单个连接最大请求数 }


#### 服务端语言与库的实现

几乎所有的 HTTP 客户端库都内置连接池。例如在 Go 语言中,`http.Transport` 提供了连接池控制:

```go
tr := &http.Transport{
    MaxIdleConns:        100,
    MaxIdleConnsPerHost: 10,
    IdleConnTimeout:     90 * time.Second,
}
client := &http.Client{Transport: tr}

Java 的 Apache HttpClient 同样可以精细配置连接池:

PoolingHttpClientConnectionManager cm = new PoolingHttpClientConnectionManager();
cm.setMaxTotal(200);
cm.setDefaultMaxPerRoute(20);
CloseableHttpClient client = HttpClients.custom()
        .setConnectionManager(cm)
        .build();