WebSocket 和 Http 的核心区别
一、WebSocket 和 HTTP 的核心区别
1. 连接方式不同
HTTP:短连接 / 半双工
-
HTTP 是 请求--响应模式
-
必须由客户端发起请求,服务端才能返回数据
-
一次请求结束后,连接通常关闭(除非使用 keep-alive)
📌 因此,HTTP 不能主动推送消息
(除非用轮询、长轮询、SSE 等 hack 手段)
WebSocket:长连接 / 全双工
-
一旦建立连接(通过 HTTP 升级 handshake)
-
客户端和服务端可以互相主动发消息
-
持续保持连接,不需要重复建立链接
📌 WebSocket 是 真正的全双工通信
类似直接拿了一条 TCP 通道来传输数据。
2. 协议不同
-
HTTP 使用
http://或https:// -
WebSocket 使用
ws://或wss://
WebSocket 在建立连接时使用 HTTP 协议,然后通过
Upgrade: websocket切换协议。
3. 通信效率不同
HTTP
-
每次请求都需要完整的 HTTP 报文头(很大)
-
大量无意义的 header 消耗带宽
WebSocket
-
建立连接后,每次消息的头部非常小(通常只有 2 字节)
-
可以进行二进制传输
-
性能更高
4. 服务端推送能力
| 协议 | 服务端能主动发消息? |
|---|---|
| HTTP | ❌ 不能(必须由客户端请求) |
| WebSocket | ✔️ 可以随时主动推送 |
二、WebSocket 的主要优点
5. 真正的全双工通信
客户端和服务端随时可以互相发送数据 → 低延迟。
6. 适合实时应用
例如:
-
实时聊天(微信网页版、企业 IM)
-
实时通知系统(订单变化、消息提醒)
-
实时体育比分刷新
-
股票行情 / K 线图
-
实时在线协作(Google Docs)
-
游戏匹配、实时同步
7. 网络开销小
WebSocket 数据包头非常小(几字节),对比 HTTP 动辄上百字节的头部 → 带宽消耗更少。
8. 保持长连接,延迟更低
不用重复建立 TCP 连接
不用反复发送完整 HTTP 报文
响应速度提升明显。
9. 支持二进制格式
可传输:
-
ArrayBuffer
-
Blob
非常适合:
-
音视频数据
-
游戏状态同步
-
IoT 设备数据传输
三、总结:WebSocket vs HTTP
| 项目 | HTTP | WebSocket |
|---|---|---|
| 连接 | 短连接 | 长连接 |
| 通信方式 | 半双工 | 全双工 |
| 服务端主动推送 | ❌ 不行 | ✔️ 可以 |
| 数据报文 | 头部大,冗余 | 头部小,效率高 |
| 实时性 | 弱 | 强 |
| 应用场景 | 普通页面请求 | 聊天、股票、游戏等实时应用 |