WebSocket 通俗讲解
WebSocket 通俗讲解:让网页“活”起来的秘密通道 💬
想象一下你和同事在线协作写文档。
他刚敲完一句话,而你这边——
要么得“刷新”才能看到更新,要么干脆半分钟都没反应。
是不是很崩溃?
问题不在你网卡,也不在你代码写得烂,而在于——
HTTP 本身天生就不适合“实时通信”。
一、HTTP 的局限:单行道上的拥堵
HTTP 协议诞生于上世纪 90 年代,最初的目标很朴素:
“让浏览器能从服务器拿到网页。”
于是,它被设计成了一条单行道:
客户端(浏览器)发请求 → 服务器响应 → 链接关闭。
这就好比你每次和朋友说话,都得重新拨电话:
“喂,我要一句话。”
“好的,给你。”
——挂断。
当时,这个模型非常高效。毕竟那个年代,网页都是静态的。
可如今,互联网变了——
我们需要聊天、协作、实时监控、股票推送……
结果 HTTP 这种“有事才问”的模式,就成了拖后腿的瓶颈。

二、WebSocket 登场:让网页“活”起来
2011 年,WebSocket 正式成为标准。
它的出现,就像在单行道上开出了一条双向快车道。
客户端和服务器之间,不再是“问答模式”,
而是一条常驻通道——
双方都可以随时发消息,不必重新握手。
简单理解:
HTTP 是“书信来往”,
WebSocket 是“实时聊天”。
三、WebSocket 是怎么工作的?
1️⃣ 客户端请求升级
一开始,浏览器还是用 HTTP 发起请求,只不过在请求头里加了两行特殊的暗号:
Upgrade: websocket
Connection: Upgrade
这就相当于在 HTTP 信封里夹了一张小纸条:“嘿,我想聊实时的~”
2️⃣ 服务器同意切换
服务器看到这纸条,如果也支持 WebSocket,就回复:
HTTP/1.1 101 Switching Protocols
意思是:“OK,咱俩换个频道聊吧。”
3️⃣ 升级成功,连接保持
从这之后,HTTP 的那套规则就不再用了。
连接保持打开状态,双方可以自由发消息。
4️⃣ 维持心跳
为防止网络中途断开,WebSocket 还支持 ping/pong 心跳包,
确保双方都还在线。
整个过程,只有最初的“握手”是 HTTP,之后的通信都是基于 TCP 的持久通道。

四、为什么大家都爱 WebSocket?
🌟 双向通信 —— 不用轮询,不用刷新,消息瞬间同步。
⚡ 低延迟 —— 握手一次,多次通信,延迟极低。
💰 节省资源 —— 一个连接可传递上千条消息,无需反复开关连接。
🧩 支持多种格式 —— 文本、JSON、二进制,想发啥发啥。
🌍 广泛兼容 —— 所有现代浏览器、框架(如 Spring、Node.js、Django)都原生支持。
🎮 适合高频更新场景 —— 聊天、协作文档、游戏联机、股票行情、IoT监控……
五、但它也不是万能的
WebSocket 的魔力也有代价。
⚙️ 资源占用:每个客户端都要保持一个连接,对服务器压力不小。
🔁 无内建重连机制:断线得你自己写逻辑重连。
📈 扩展复杂:多节点部署时,要做“粘性会话”或消息转发。
🔒 安全验证麻烦:没有 CORS 概念,必须手动校验来源与 Token。
🚫 不适合流媒体:音视频流还是得交给 WebRTC 这类专用协议。
六、该什么时候用 WebSocket?
✅ 适用场景:
- 聊天系统(双向互动)
- 协作文档、白板(实时同步)
- 股票行情、监控仪表盘(高频更新)
- 在线游戏、IoT 实时数据
❌ 不适用场景:
- 数据更新很少(每小时几次)
- 只需要单向推送(新闻播报)
- 防火墙或代理环境复杂(阻拦协议升级)
- 传输大流量音视频
对于单向推送场景,Server-Sent Events (SSE) 更轻便,还能自动重连。
对于偶尔更新的系统,简单的 轮询(polling) 就够了。
七、结语:WebSocket,让网络不再“单向”
HTTP 像邮差,一封一封地传信;
WebSocket 像对讲机,双方随时通话。
它并不是银弹(silver bullet),
但它填补了 Web 世界中一个巨大的空白——实时性。
如今,不论是协作文档、交易系统还是游戏匹配,
WebSocket 都是那根让互联网“活”起来的神经线。
选对通信方式,
你写的网页,就能像人一样“说话”。
