网络:HTTP Keep-Alive 和 TCP Keepalive
HTTP Keep-Alive | TCP Keepalive | |
---|---|---|
含义 | HTTP 长连接,持久连接 | TCP 保活机制 |
实现 | 应用层(用户态) | TCP 层(内核态) |
HTTP Keep-Alive
- HTTP 基于 TCP 协议:
- 进行 HTTP 通信之前,需要先建立 TCP 连接。
- 结束 HTTP 通信之后,需要断开 TCP 连接。
- HTTP 采用请求-应答模式:客户端发起请求,服务端才会返回响应。
短连接 & 长连接
-
短连接:
- 每进行一次 HTTP 请求/应答,都建立和断开一个 TCP 连接。
- 客户端只能串行请求,且增加了双方的通信开销。
-
长连接:
- 只要任意一端没有明确提出断连,则保持 TCP 连接状态。
- 减少了 TCP 连接的重复建立和断开所造成的额外开销,减轻服务端的负载。
Keep-Alive
-
HTTP 1.0 默认关闭:如果要开启
Keep-Alive
,客户端和服务器需要在报文首部中添加。Connection: Keep-Alive
-
HTTP 1.1 默认开启:如果要关闭
Keep-Alive
,需要在报文首部中添加。Connection: close
TCP Keepalive
保活机制:在双方没有数据交互时,通过探测报文来确定对方 TCP 连接是否存活。
触发 TCP 保活机制的条件时,内核的 TCP 协议栈就会发送探测报文。
-
对端程序正常工作:对端收到探测报文后会正常响应,此时会重置 TCP 保活时间。
-
对端主机宕机 or 探测报文不可达:如果达到保活探测次数后仍没收到对端响应,TCP 报告该 TCP 连接已经死亡。
Hint:
- 进程崩溃 ≠ 主机宕机:进程崩溃后操作系统在回收资源时会发送 FIN 报文,而主机宕机无法感知。
- 启用保活机制:应用程序使用 TCP 保活机制,需要通过 socket 设置
SO_KEEPALIVE
选项。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义