文章目录
-
- [什么是 WebSocket 协议?](#什么是 WebSocket 协议?)
- [WebSocket 的工作原理?](#WebSocket 的工作原理?)
- [WebSocket 与 HTTP 的区别?](#WebSocket 与 HTTP 的区别?)
- [WebSocket 的典型应用场景?](#WebSocket 的典型应用场景?)
- [WebSocket 为什么比轮询更高效?](#WebSocket 为什么比轮询更高效?)
- [WebSocket 如何保持心跳?](#WebSocket 如何保持心跳?)
- [WebSocket 如何处理断线重连?](#WebSocket 如何处理断线重连?)
- [WebSocket 的安全性如何保障?](#WebSocket 的安全性如何保障?)
什么是 WebSocket 协议?
- WebSocket 是一种在 单个 TCP 连接 上 进行 全双工通信 的协议。
- HTTP 是 请求-响应模型(客户端主动,请求一次返回一次)。
- WebSocket 是 持久化连接(连接建立后,客户端和服务端都可以随时互发消息)。
WebSocket 的工作原理?
- WebSocket 是在 一个已建立的 TCP 连接上,通过一次 HTTP 升级握手把协议从 HTTP 切换成 WebSocket,从此客户端和服务器之间可以进行 双向、低延迟、持续的帧(frame)级别通信。
- 客户端与服务器建立 TCP 连接(三次握手,TCP 层,浏览器自动处理)。
- 客户端发起 HTTP 升级(Upgrade)握手,请求从 HTTP 切换到 WebSocket。
- 服务器校验请求并返回 101 Switching Protocols,握手完成,协议升级。
- 握手完成后,双方通过 WebSocket 帧(frame) 在同一 TCP 连接上往返发送消息(双向)。
- 任意一方可发送 Close 帧关闭连接。
- WebSocket 连接的建立过程分为两个阶段:首先客户端和服务器通过 TCP 三次握手建立底层连接;然后客户端发起一个带有 Upgrade: websocket 的 HTTP 请求;服务端返回 101 Switching Protocols 响应后,协议正式从 HTTP 升级为 WebSocket。之后双方就在同一个 TCP 连接上进行全双工通信,无需再频繁建立连接。
go
复制代码
Client Server
<----- TCP three-way handshake ----------> (完成)
GET /chat Upgrade: websocket ---------> (HTTP 握手请求)
<----- 101 Switching Protocols ----------> (握手成功)
<---------------------------------------> (WebSocket frames 双向通信)
Client 或 Server 发送 Close 帧 ----------> (连接关闭)
WebSocket 与 HTTP 的区别?
WebSocket 的典型应用场景?
- 在线聊天、弹幕系统
- 股票 / 币价 实时推送
- 在线游戏状态同步
- 协同编辑(如多人文档编辑)
- 实时监控系统(如服务器状态、日志推送)
WebSocket 为什么比轮询更高效?
- 轮询每次都建立 HTTP 请求,带大量请求头和握手开销。
- WebSocket 连接只建立一次,之后实时推送。
- 减少延迟和网络带宽消耗。
WebSocket 如何保持心跳?
- 常见心跳机制:
- 客户端周期性发送 Ping 帧;
- 服务端响应 Pong 帧;
- 若超时未响应则断开重连。
WebSocket 如何处理断线重连?
- 客户端检测到连接断开(或心跳超时);
- 重新发起 WebSocket 连接;
- 通常结合 指数退避算法 或 固定间隔重连。
WebSocket 的安全性如何保障?
- 使用 wss://(基于 TLS 的 WebSocket);
- 验证 token;
- 控制消息大小、速率;
- 设置连接超时。