🌐 WebSocket 基础概念
1. 什么是 WebSocket?
- 双向通信协议 - 客户端和服务器可以主动发送消息
 - 持久连接 - 建立连接后保持打开状态
 - 实时性 - 消息即时到达,无延迟
 
2. 与 HTTP 的区别
| 特性 | HTTP | WebSocket | 
|---|---|---|
| 连接方式 | 短连接,请求-响应 | 长连接,持久化 | 
| 通信方向 | 客户端发起 | 双向通信 | 
| 实时性 | 轮询,有延迟 | 真正实时 | 
| 开销 | 每次请求都有头部 | 建立连接后开销小 | 
🔧 WebSocket 核心 API
服务器端(Node.js)
            
            
              javascript
              
              
            
          
          // 1. WebSocket 路由
app.ws('/ws', (ws, req) => {
    // ws: WebSocket 连接对象
    // req: 请求对象
});
// 2. 发送消息
ws.send('消息内容');
ws.send(JSON.stringify({ data: '对象数据' }));
// 3. 事件监听
ws.on('message', (msg) => {});    // 接收消息
ws.on('close', () => {});         // 连接关闭
ws.on('error', (err) => {});      // 错误处理
        客户端(浏览器)
            
            
              javascript
              
              
            
          
          const ws = new WebSocket('ws://localhost:3000/ws');
// 事件监听
ws.onopen = () => {};             // 连接建立
ws.onmessage = (event) => {};     // 接收消息
ws.onclose = () => {};            // 连接关闭
ws.onerror = () => {};            // 错误处理
// 发送消息
ws.send('消息内容');
        🏗️ WebSocket 连接生命周期
连接建立
            
            
              javascript
              
              
            
          
          // 客户端发起连接
const ws = new WebSocket('ws://服务器地址/路径');
// 服务器处理连接
app.ws('/路径', (ws, req) => {
    console.log('新连接建立');
});
        消息通信
            
            
              javascript
              
              
            
          
          // 客户端发送
ws.send('Hello Server!');
// 服务器接收
ws.on('message', (msg) => {
    console.log('收到:', msg);
    // 服务器回复
    ws.send('Hello Client!');
});
        连接关闭
            
            
              javascript
              
              
            
          
          // 客户端关闭
ws.close();
// 服务器检测关闭
ws.on('close', () => {
    console.log('连接已关闭');
});
        📡 广播机制实现
单播 - 发给特定客户端
            
            
              javascript
              
              
            
          
          ws.send('私人消息');
        广播 - 发给所有客户端
            
            
              javascript
              
              
            
          
          function broadcast(message) {
    clients.forEach(client => {
        if (client.readyState === 1) { // 1 = OPEN
            client.send(message);
        }
    });
}
        排除广播 - 发给除某人外的所有人
            
            
              javascript
              
              
            
          
          function broadcast(message, excludeWs) {
    clients.forEach(client => {
        if (client !== excludeWs && client.readyState === 1) {
            client.send(message);
        }
    });
}
        🔍 连接状态管理
readyState 状态值
            
            
              javascript
              
              
            
          
          const WebSocket = {
    CONNECTING: 0, // 连接中
    OPEN: 1,       // 已连接,可通信 ✅
    CLOSING: 2,    // 关闭中
    CLOSED: 3      // 已关闭
};
        连接状态检查
            
            
              javascript
              
              
            
          
          // 检查是否可以发送消息
if (ws.readyState === 1) {
    ws.send('消息');
}
        🎯 消息格式处理
文本消息
            
            
              javascript
              
              
            
          
          // 发送简单文本
ws.send('简单消息');
// 发送 JSON 数据
ws.send(JSON.stringify({
    type: 'chat',
    user: '张三',
    message: '你好',
    time: '10:00'
}));
        消息类型设计
            
            
              javascript
              
              
            
          
          // 系统消息
{
    type: 'system',
    message: '用户加入聊天室',
    userCount: 5
}
// 聊天消息
{
    type: 'chat', 
    user: '用户名',
    message: '消息内容',
    time: '时间'
}
        ⚠️ 错误处理机制
基本错误处理
            
            
              javascript
              
              
            
          
          // 服务器端
ws.on('error', (err) => {
    console.error('WebSocket错误:', err);
});
// 客户端
ws.onerror = (error) => {
    console.error('连接错误:', error);
};
        💡 最佳实践总结
1. 消息协议设计
- 使用 JSON 格式统一消息结构
 - 定义清晰的消息类型(type字段)
 - 包含必要的元数据(时间、用户等)
 
2. 连接管理
- 及时清理断开连接的客户端
 - 检查 readyState 再发送消息
 - 实现心跳机制保持连接
 
3. 广播优化
- 避免广播给发送者自己(排除机制)
 - 过滤非活跃连接
 - 支持分组广播(房间概念)
 
4. 数据安全
- 验证消息格式和内容
 - 限制消息长度和频率
 - 敏感信息过滤
 
🚀 从基础到进阶
已掌握的基础:
✅ WebSocket 连接建立和管理
✅ 双向消息通信
✅ 广播机制实现
✅ 多用户实时聊天
✅ 连接状态监控
✅ 基础错误处理
下一步学习:
🔜 心跳检测和重连机制
🔜 房间/频道系统
🔜 用户认证和权限
🔜 消息持久化存储
🔜 生产环境部署
🔜 性能优化和扩展
你的代码已经涵盖了 WebSocket 最核心的 80% 功能! 🎉