WebSocket建立持久连接,实现真正的双向通信。
HTTP轮询问题:
// 传统方案:轮询
// 客户端定时问服务器有没有新数据
// 浪费带宽,延迟高
setInterval(() => {
fetch("/api/notifications");
}, 5000);
WebSocket优势:
// 1. 一次握手,持久连接
// 2. 服务器可以主动推送
// 3. 双向通信
// 4. 低延迟
// 连接建立后保持打开
// 双方可以随时发送数据
和HTTP对比:
| HTTP | WebSocket | |
|---|---|---|
| 连接 | 短连接 | 持久连接 |
| 方向 | 客户端发起 | 双向 |
| 实时性 | 轮询/Long Poll | 真正实时 |
| 资源 | 每次请求header | header很小 |
使用场景:
面试追问:WebSocket断开怎么办?心跳检测断线,重连机制。