用途:用于构建和排查实时双向通信系统,覆盖 WebSocket 协议、服务端实现、认证、扩展与容错。
主要能力: 协议基础:HTTP Upgrade 到 WebSocket 握手(Sec-WebSocket-Key/Accept),握手后全双工二进制分帧,帧类型 text(0x1)、binary(0x2)、close(0x8)、ping(0x9)、pong(0xA)。 服务端(ws/Node.js):连接即认证、客户端注册表(userId→Set<WebSocket>)、心跳(30s ping,终止死连接)、定向发送与广播、连接关闭清理。 认证模式:查询字符串 token(需 TLS)、Cookie(浏览器首选)、Sec-WebSocket-Protocol 自定义头变通、首条消息认证。 横向扩展:Redis 发布订阅跨实例广播,Redis Set 实现房间成员与房间广播。 Socket.IO:Redis 适配器扩展、认证中间件、房间加入与定向 emit、websocket 优先加 polling 回退。 浏览器客户端:指数退避重连(1s 起,最大 30s)、按类型分发处理器、鉴权失败(4001)不重连、可取消订阅。 SSE 替代:单向服务端推送,text/event-stream,心跳注释行,EventSource 自动重连。 消息协议:类型化信封与校验(如 send_message 的 roomId、text 长度上限)。 限流与可观测:按用户限流(60 条/60 秒示例),跟踪连接数、出入消息、错误与 ping/pong 延迟。
限制与安全:生产必须用 wss://,在 HTTP 升级阶段认证,限流连接与消息,校验所有入站内容,设置 maxPayload(如 64KB)防内存耗尽,仅用 terminate() 处理死连接,不得回显未净化数据,Socket.IO 生产禁用 origin: '*'。协议规范见 RFC 6455,工具见 ws npm 与 Socket.IO 文档。