1075 字
约 3 分钟
5
WebSocket 与 HTTP:实时通信的核心区别
WebSocket 与 HTTP:实时通信的核心区别
1. 什么是 WebSocket?
WebSocket 是一种基于 TCP 的全双工通信协议,它允许客户端和服务器建立一次连接后,双方可以持续进行数据传输。
传统 HTTP 通信模式是:
客户端请求 → 服务器响应 → 连接结束
而 WebSocket 是:
客户端连接 → 建立长连接 → 双方持续通信
因此 WebSocket 非常适合实时场景,例如:
- 在线聊天
- 实时股票行情
- 游戏同步
- 在线协作编辑
- 实时监控系统
2. WebSocket 工作流程
WebSocket 建立连接时,会先通过 HTTP 完成一次握手。
例如:
客户端:
GET /chat HTTP/1.1
Host: example.com
Upgrade: websocket
Connection: Upgrade
服务器返回:
HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
握手成功后,通信协议从 HTTP 切换为 WebSocket。
之后:
客户端 <================> 服务器
双向实时传输数据
双方都可以主动发送消息。
3. HTTP 与 WebSocket 对比
| 对比项 | HTTP | WebSocket |
|---|---|---|
| 通信方式 | 请求-响应 | 双向通信 |
| 连接方式 | 短连接为主 | 长连接 |
| 数据发送 | 客户端主动请求 | 双方主动发送 |
| 实时性 | 较低 | 高 |
| 服务器主动推送 | 困难 | 支持 |
| 开销 | 每次请求有 HTTP 头 | 建立后开销低 |
| 适用场景 | 网页、接口请求 | 聊天、游戏、实时数据 |
4. 为什么 HTTP 不适合实时通信?
假设聊天室:
用户 A 发送消息:
A ---> 服务器
|
|
v
用户 B
如果使用 HTTP:
用户 B 想知道有没有新消息,需要不断:
请求
请求
请求
请求
这种方式叫:
轮询(Polling)
缺点:
- 浪费服务器资源
- 延迟高
- 大量无效请求
而 WebSocket:
客户端A
|
|
WebSocket连接
|
|
服务器
|
|
客户端B
服务器收到消息后,可以立即推送给 B。
5. WebSocket 的优势
① 实时性强
服务器可以主动发送:
例如:
股票价格变化:
服务器:
价格上涨
↓
客户端立即收到
② 减少网络开销
HTTP:
GET /message
Header:
Cookie
Token
User-Agent
...
每次请求都有大量头信息。
WebSocket:
建立连接后:
message: hello
数据更加轻量。
③ 支持大量实时连接
例如:
- 在线客服系统
- 游戏服务器
- 直播弹幕
都可以通过 WebSocket 保持连接。
6. WebSocket 的缺点
虽然 WebSocket 很强,但也不是万能。
① 长连接占用资源
服务器需要维护:
用户1 connection
用户2 connection
用户3 connection
...
连接数量巨大时,需要考虑:
- 内存
- CPU
- 连接管理
② 不适合普通接口请求
例如:
查询用户信息:
GET /user/1001
使用 HTTP 更简单。
③ 部署复杂度更高
需要考虑:
- 心跳检测
- 断线重连
- 负载均衡
7. WebSocket 应用场景
适合:
即时聊天
例如:
微信、在线客服。
实时游戏
例如:
玩家移动:
玩家A移动
|
v
服务器同步
|
v
其他玩家立即看到
实时数据
例如:
股票:
价格变化
↓
服务器推送
↓
客户端更新
8. 总结
HTTP 和 WebSocket 并不是替代关系,而是不同场景使用不同工具。
HTTP:
适合一次请求一次响应。
WebSocket:
适合需要持续、实时、双向通信的场景。
简单记忆:
HTTP:
客户端问,服务器答
WebSocket:
客户端和服务器一直聊天
在现代互联网系统中,两者通常结合使用:
例如:
HTTP:
登录、获取数据
WebSocket:
实时消息推送
这也是目前很多大型系统的常见架构。
WebSocket 与 HTTP:实时通信的核心区别
http://clxhxhhr.top/posts/403/ 评论
0 条
还没有评论,先写一条吧。