WebSocket 是什么
HTTP 轮询 vs 长连接;适用场景。
25 分钟
WebSocket 是什么
WebSocket 在单个 TCP 连接上提供全双工通信。CodeRoadMap 主业务仍走 REST(spring-boot-essentials 的 @RestController);实时实验台(聊天、通知)才用 WebSocket。
学习目标
- 区分轮询、长轮询与 WebSocket
- 判断何时该用实时通道
- 理解本站 REST / WS 分工
为什么不用 HTTP 轮询
| 方式 | 延迟 | 开销 | 适用 |
|---|---|---|---|
| 短轮询 | 高(间隔决定) | 大量无效请求 | 低频状态 |
| 长轮询 | 中 | 连接占用 | 兼容老浏览器 |
| WebSocket | 低 | 握手后帧级开销 | 聊天、通知、协作 |
// 短轮询:每 3 秒问一次「有新消息吗?」
setInterval(async () => {
const res = await fetch("/api/notifications/unread");
// ...
}, 3000);
WebSocket 建立后,服务端 主动推送,无需客户端反复发起 HTTP。
CodeRoadMap 场景
浏览器 ──REST──► Nginx ──► Spring Boot :8080 (课时、进度、鉴权)
浏览器 ──WS────► Nginx ──► Spring Boot /ws (实验台聊天、实时通知)
何时不用 WebSocket
- 纯 CRUD、分页列表 → REST 足够
- 只需服务端单向推送、且可 HTTP/2 → 考虑 ws-sse
- 防火墙只允许 443 且不能 Upgrade → 降级 SSE 或轮询
练习
- 列出 CodeRoadMap 三个适合 WebSocket 的功能点
- 对比轮询与 WS 在 100 在线用户下的请求量
- 读 next-api 理解 REST 主路径
小结
WebSocket = 长连接上的双向通道,补 REST 的实时缺口。 下一课握手与帧格式。
加载本节练习…