🔌 HTTP 连接方式与 WebSocket 流程对比

深入理解三种通信模式的本质差异

🔄
HTTP 短连接
One Request Per Connection
Client
Server
GET /api/data
HTTP请求
200 OK + Data
HTTP响应
GET /api/user
HTTP请求
200 OK + Data
HTTP响应
⚠️ 每次请求都需建立新连接
每次请求都需 TCP 握手
RTT 开销大,延迟高
实现简单,兼容性好
适合低频、独立的请求
🔗
HTTP 长连接
Keep-Alive Connection
Client
Server
🤝 TCP 三次握手 (仅一次)
GET /api/a
HTTP请求 #1
200 OK
HTTP响应 #1
GET /api/b
HTTP请求 #2
200 OK
HTTP响应 #2
🔒 连接关闭 (超时/主动)
TCP 握手仅一次,复用连接
仍然:Client → Server 单向通信
无法服务端主动推送
适合:RESTful API 调用
WebSocket
全双工持久连接
Client
Server
HTTP Upgrade
Client → Server
101 Switching
Server → Client
📤 客户端消息
📥 服务端消息
📤 客户端消息
📥 服务端消息
🔄 双向实时通信,持续保持
一次握手,建立持久连接
全双工:双方可随时互发
Server 可主动推送数据
帧轻量,Header 极小

🎯 核心区别总结

连接模式

短连接:请求-响应后立即关闭
长连接:多次请求-响应复用同一连接
WebSocket:握手后持久连接,任意时刻双向通信

通信方向

短/长连接:半双工,只能 Client 发起请求
WebSocket:全双工,双方平等,可主动发送

实时性

短/长连接:轮询或 SSE 实现伪实时
WebSocket:原生支持真正的实时通信

协议开销

HTTP:每次请求需完整 Header
WebSocket:首帧握手后,帧 Header 仅 2-14 字节

适用场景

RESTful API 表单提交 页面加载 低频数据获取 实时聊天 在线游戏 股票行情 协作编辑 IoT 设备状态 实时通知