用途:整理 Socket.IO v4.x 客户端的使用模式,覆盖连接生命周期、重连、认证、房间、命名空间、确认机制、二进制数据与 TypeScript 集成。
主要能力:Socket.IO 是构建在 WebSocket 之上的协议层,客户端与普通 WebSocket 服务器无法互通。它提供传输回退(先 HTTP 长轮询再升级 WebSocket)、自动重连、房间、命名空间与确认机制,压缩后约 14.5KB。
必要用法:用 ServerToClientEvents 与 ClientToServerEvents 声明事件类型;令牌通过 auth 选项传递,函数形式会在每次重连时重新求值;用 socket.off(event, handler) 以相同函数引用移除监听;处理 connect_error 与 manager 的 reconnect_failed;连接后检查 socket.recovered(v4.6.0+)判断是否需要全量刷新状态。
关键区分:timeout 是连接超时(默认 20000ms),ackTimeout 是每次 emit 的确认时钟,二者无关;ackTimeout 需配合 retries 才启用重传,且服务端处理器需幂等。命名空间共享同一传输,各自可带独立 auth;房间由服务端管理,客户端无法查询自己所在房间。
适用场景:需要投递确认的双向消息、定向广播、带凭证刷新的重连、需要轮询回退的受限网络、客户端与服务端之间的类型化事件契约。
限制:与普通 WebSocket 客户端双向不兼容;默认传输顺序是先轮询后升级;socket.recovered 仅在服务端启用连接状态恢复时为 true;volatile.emit() 在拥塞时按设计丢弃消息;socket.id 每次重连都会重新生成,不能作为用户标识。令牌来源与刷新、数据存储与渲染、服务端房间成员与命名空间中间件配置不在本技能范围内。