用途
WebSocket Implementation 用于构建可扩展的 WebSocket 实时通信系统,支持实时双向通信,并覆盖连接管理、消息路由、错误处理与水平扩展。
适用场景包括:
- 构建实时聊天与消息系统
- 实现实时通知
- 创建协同编辑工具
- 广播实时数据更新
- 构建实时仪表盘
- 向客户端流式推送事件
- 实时多人在线游戏
主要能力
该技能围绕以下方面提供实现指导:
- 连接管理
- 消息路由
- 错误处理
- 水平扩展支持
使用方式
资料提供了一个最小可运行示例,使用 Node.js 生态的 Express、http、socket.io 与 redis,并配合 @socket.io/redis-adapter 实现水平扩展。示例中包含 CORS、传输方式(websocket、polling)、重连参数(reconnection、reconnectionDelay、reconnectionDelayMax、reconnectionAttempts)等配置,以及用于连接管理的 connectedUsers Map。
示例代码:
const express = require("express");
const http = require("http");
const socketIo = require("socket.io");
const redis = require("redis");
const app = express();
const server = http.createServer(app);
const io = socketIo(server, {
cors: { origin: "*" },
transports: ["websocket", "polling"],
reconnection: true,
reconnectionDelay: 1000,
reconnectionDelayMax: 5000,
reconnectionAttempts: 5,
});
// Redis adapter for horizontal scaling
const redisClient = redis.createClient();
const { createAdapter } = require("@socket.io/redis-adapter");
io.adapter(createAdapter(redisClient, redisClient.duplicate()));
// Connection management
const connectedUsers = new Map();
// ... (see reference guides for full implementation)
资料还列出了 references/ 目录下的详细参考指南:
- Node.js WebSocket Server (Socket.IO)
- Browser WebSocket Client
- Python WebSocket Server (aiohttp)
- Message Types and Protocols
- Scaling with Redis
最佳实践
建议做法(DO):
- 实现正确的身份验证
- 优雅地处理重连
- 有效管理房间/频道
- 适当地持久化消息
- 监控活跃连接
- 实现在线状态功能
- 使用 Redis 进行扩展
- 添加消息确认
- 实现限流
- 正确处理错误
不建议做法(DON'T):
- 发送未加密的敏感数据
- 在内存中保留无限的消息历史
- 允许任意创建房间/频道
- 忘记清理已断开的连接
- 频繁发送大消息
- 忽略网络故障
- 在消息中存储密码
- 跳过身份验证/授权
- 造成连接数无界增长
- 从第一天起就忽略可扩展性
限制
资料未提供具体的收费、价格、平台支持范围或性能指标等信息。