标准答案
- keep-alive 复用连接会减少 TCP/TLS 建连,但服务器和客户端的空闲超时要协调。
- headers、request、response 和 keep-alive 都有不同的超时含义,不能只设置一个总超时。
- 客户端断开时应停止读取和取消可取消的下游工作,响应流要正确结束。
- 负载均衡、代理和 Node 服务的连接超时应形成明确的调用链预算。
题目解析
keep-alive 可以减少 TCP/TLS 握手,但空闲连接、请求头、请求体、响应和服务器关闭都有不同生命周期。每个阶段都要有上限,防止慢客户端长期占用 socket 和内存。
代理、负载均衡、Node 服务和客户端的超时要形成调用链预算,不能只在一层把 timeout 调大。客户端断开时应停止可取消读取和下游任务,无法取消的副作用要记录状态。
连接复用还要处理半开、响应体未消费、优雅停机和连接池上限。连接数增加不等于吞吐增加,必须结合 P99、FD 和下游容量验证。
常见误区
- 误区:无限 keep-alive。改正:设置空闲、请求和最大连接生命周期,并监控连接数和文件描述符。
- 误区:只设置客户端 timeout。改正:服务端、代理和下游共同定义 deadline 与超时层次。
- 误区:客户端断开后后台任务无限继续。改正:传播取消并释放资源,无法取消的操作进入可查询状态。