它们是完全一样的技术(都是 TCP Keep-Alive),但在“应用场景”和“生命周期管理”上,Web 请求的长连接和 Kafka、IM 即时通长连接有着巨大的区别
Web 长连接 (HTTP Keep-Alive)
场景:你去政府办事大厅办护照。
- 短连接:每填一张表,都要重新排队取号,办完一张表就离开大厅,下一张表再来重新取号。效率极低。
- Web 长连接:你取了一次号(TCP 握手),坐在窗口前。
- 递交申请表 -> 工作人员处理 -> 收回。
- 递交照片 -> 工作人员处理 -> 收回。
- 递交身份证 -> 工作人员处理 -> 收回。
- 办完所有事(页面加载完),你站起来走了。
- 如果你在窗口前发呆超过 5 分钟(超时),保安会请你离开(断开连接),下次再来得重新取号。
- 关键点:事情办完了,关系就结束了。服务器不会在你回家后突然打电话给你。
🚀 业务级长连接 (Kafka/IM)
场景:你雇佣了一个私人助理(或者开通了热线)。
- 你拨通电话(建立连接),然后永远不挂断。
- 你可以随时吩咐他做事(发送请求)。
- 更重要的是:即使你没说话,如果有紧急事务(新消息、股票涨跌、Kafka 新数据),助理会立刻主动在电话里告诉你。
- 这个电话可能持续一整天,直到你下班(关闭 App)或者信号断了。
- 关键点:连接是为了保持“在线”和“实时接收推送”。
长连接怎么维持?(心跳机制)
总结
Connection: keep-alive 和简单的超时计时器(
Keep-Alive Timeout(例如 Nginx 默认 75 秒)。Web 服务器(Nginx, Apache, Tomcat 等)默认都开启。