跳转至

长连接


HTTP Keep-Alive 概述

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

HTTP Keep-Alive 头部

请求头

HTTP
1
2
Connection: keep-alive
Keep-Alive: timeout=60, max=100

响应头

HTTP
1
2
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
1
2
3
4
upstream backend {
    server backend1.example.com;
    keepalive 32;  # 连接池大小
}
检测机制:
* Nginx 维护一个连接池,大小由 keepalive 参数控制
* 当收到新请求时,Nginx 会优先检查连接池中是否有空闲的长连接
* 检查顺序:空闲连接 -> 创建新连接 -> 等待连接释放

检测机制

Text Only
1
2
3
4
连接池状态:
├── 空闲连接(idle)     - 可立即使用
├── 活跃连接(active)   - 正在处理请求
└── 关闭连接(closing)  - 准备关闭
Nginx Configuration File
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
# 启用长连接
keepalive_timeout 65;
keepalive_requests 100;

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

调试和监控

查看连接状态

Bash
1
2
3
4
5
# 查看TCP连接
netstat -an | grep :80

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