短连接:每次通信建立一次 TCP 连接,用完即关闭(如早期 HTTP/1.0 默认行为)。长连接:连接建立后保持复用,多个请求复用同一连接(HTTP/1.1 默认 Keep-Alive)。
展开解析:短连接简单、服务端资源占用低,适合请求稀疏的场景(如网页浏览早期、一次性任务);但每次都要承担三次握手和慢启动的开销。长连接省去反复建连成本,适合高频通信(IM、数据库连接池、游戏),代价是服务端要维护大量连接状态,且闲置连接占用文件描述符和内存。
心跳机制:长连接中双方可能长时间无数据,中间 NAT 设备或防火墙会超时回收映射,对端崩溃也难以察觉。心跳就是周期性发送极小的探活包(应用层 ping/pong,或 TCP 层的 keepalive 选项),作用是:保活(防止连接被中间设备断开)和探死(检测对端是否存活,配合超时判定与重连)。
易错点:TCP 自带的 keepalive 默认 2 小时才探测,实用中基本都要在应用层实现自己的心跳(如 30 秒一次)。
追问方向:心跳间隔如何权衡、断线重连与消息幂等。