Skip to content

长连接 ​


HTTP Keep-Alive 概述 ​

HTTP 长连接(HTTP Keep-Alive)是指在一个TCP连接上可以连续发送多个HTTP请求和响应,
而不需要为每个请求都重新建立连接。

HTTP Keep-Alive 头部 ​

请求头 ​

http
Connection: keep-alive
Keep-Alive: timeout=60, max=100

响应头 ​

http
Connection: keep-alive
Keep-Alive: timeout=60, max=100

参数说明 ​

  • timeout: 连接保持时间(秒)
  • max: 最大请求数量

HTTP 版本支持 ​

HTTP/1.0 ​

  • 默认短连接
  • 需要显式设置 Connection: keep-alive

HTTP/1.1 ​

  • 默认长连接
  • 使用 Connection: close 关闭连接

HTTP/2 ​

  • 多路复用,一个连接处理多个并发请求
  • 内置长连接支持

Nginx长链接 ​

反代长连接机制 ​

链接池 ​

yaml
upstream backend {
    server backend1.example.com;
    keepalive 32;  # 连接池大小
}

检测机制:

  • Nginx 维护一个连接池,大小由 keepalive 参数控制
  • 当收到新请求时,Nginx 会优先检查连接池中是否有空闲的长连接
  • 检查顺序:空闲连接 -> 创建新连接 -> 等待连接释放

检测机制 ​

连接池状态:
├── 空闲连接(idle)     - 可立即使用
├── 活跃连接(active)   - 正在处理请求
└── 关闭连接(closing)  - 准备关闭
nginx
# 启用长连接
keepalive_timeout 65;
keepalive_requests 100;

# 上游服务器长连接
upstream backend {
    server backend1.example.com;
    server backend2.example.com;
    keepalive 32;
}

调试和监控 ​

查看连接状态 ​

bash
# 查看TCP连接
netstat -an | grep :80

# 查看连接复用情况
ss -s