WebSocket 是一种在客户端(浏览器)和服务器之间建立 双向通信通道 的网络协议。
🧠 一句话理解:
WebSocket 就像一个"持续不断的电话通话",而不是传统 HTTP 的"一问一答"。
🔍 为什么需要 WebSocket?
传统 HTTP 协议是 单向通信:
-
浏览器请求 -> 服务器响应
-
如果你想"实时获取数据",只能不断地用 Ajax 或轮询去问服务器(效率低)
WebSocket 是 双向的、长连接 ,一旦连接建立,服务器可以随时主动推送消息 给客户端(比如聊天消息、实时通知等)。
🧪 WebSocket 特点:
特性 | 说明 |
---|---|
📡 长连接 | 建立连接后保持不断开,除非主动关闭 |
🔁 双向通信 | 客户端和服务端都可以主动发送消息 |
🕐 实时性高 | 消息可以即时推送,毫秒级延迟 |
📦 数据格式轻量 | 通常发送的是字符串或二进制(比 HTTP Header 少) |
🧱 应用场景举例:
场景 | 是否适合用 WebSocket |
---|---|
💬 聊天室 / IM | ✅ 非常适合,实时消息 |
📈 股票价格 / 币价推送 | ✅ 实时更新数据 |
🎮 多人游戏同步状态 | ✅ 同步性强 |
🧠 AI 响应流式输出 | ✅ 比如 ChatGPT 的逐字输出 |
✅ 实时通知系统 | ✅ 新订单、新消息提醒等 |
🧑💻 示例代码(前端使用 WebSocket)
const socket = new WebSocket('wss://example.com/socket');
// 连接成功
socket.onopen = () => {
console.log('连接已建立');
socket.send('你好服务器'); // 可以主动发送消息
};
// 收到消息
socket.onmessage = (event) => {
console.log('收到消息:', event.data);
};
// 连接关闭
socket.onclose = () => {
console.log('连接已关闭');
};
// 发生错误
socket.onerror = (err) => {
console.error('发生错误:', err);
};
✅ 和 Ajax / SSE(Server-Sent Events)的区别?
特性 | Ajax | SSE | WebSocket |
---|---|---|---|
通信方向 | 单向 | 单向(服务端 -> 客户端) | 双向 |
是否持久连接 | 否 | 是 | 是 |
实时性 | 差(轮询) | 好 | 极好 |
服务器主动推送能力 | ❌ | ✅ | ✅ |
是否支持二进制 | ✅ | ❌(文本) | ✅ |
如果你在开发中涉及 聊天功能、实时消息、流式输出 等,就可以考虑使用 WebSocket。