WebSocket
1. 什么是WebSocket
2. 特点与优点
3. 应用场景
答:
- WebSocket,是一种网络传输协议,位于OSI模型的应用层。可在单个TCP连接上进行全双工通信,能更好的节省服务器资源和带宽并达到实时通迅
客户端和服务器只需要完成一次握手,两者之间就可以创建持久性的连接,并进行双向数据传输
从上图可见,websocket服务器b与客户端通过握手连接,连接成功后,两者都能主动的向对方发送或接受数据
而在websocket出现之前,开发实时web应用的方式为轮询
不停地向服务器发送 HTTP 请求,问有没有数据,有数据的话服务器就用响应报文回应。如果轮询的频率比较高,那么就可以近似地实现“实时通信”的效果. 轮询的缺点也很明显,反复发送无效查询请求耗费了大量的带宽和 CPU资源
2. 允许数据全双工传输
采用二进制帧解构
握手过程: 客户端发送请求, 服务段返回对应数据格式确认
3. 优点
4. 应用场景
弹幕\协同编辑\实况更新\媒体聊天
补充
补充:WebSocket 是 HTML5 推出的全双工协议,解决了 HTTP「请求-响应」模型下实时通信只能靠轮询的痛点。
补充要点:
- 握手阶段:基于 HTTP Upgrade。客户端发送
Upgrade: websocket、Connection: Upgrade、Sec-WebSocket-Key,服务端返回 101 状态码完成协议升级。 - 数据帧:采用二进制帧格式,文本帧(opcode 0x1)和二进制帧(opcode 0x2)都支持,配合 ping/pong(0x9/0xA)做心跳。
- 优点:
- 单连接长时间复用,省去 HTTP 反复建立连接的开销。
- 真正全双工,延迟低,适合高频实时交互。
- 数据格式轻量,开销远小于 HTTP 头。
- 缺点:
- 需要服务端独立维护长连接,资源开销较大。
- 部分老旧浏览器 / 代理不兼容,需要降级到 polling / SSE。
- 没有内置的「重连」「消息可靠投递」协议,需要应用层处理。
- 常见应用:实时聊天、协同编辑、在线游戏、行情推送、IoT 设备指令通道。
客户端示例:
const ws = new WebSocket('wss://example.com/socket');
ws.onopen = () => ws.send('hello');
ws.onmessage = ev => console.log('recv:', ev.data);
ws.onclose = () => console.log('closed');
补充:与 SSE(Server-Sent Events)相比,WebSocket 支持双向通信,但 SSE 更轻量、基于 HTTP,更容易穿越 CDN 和代理。



