SuperAPI AI 工具集

web-realtime-websockets

编程与开发

查看项目

更新于 10-15 19:52

技能介绍

本技能讲解原生 WebSocket API 的实时通信模式。原生 API 只提供全双工通道,重连、存活检测、断线期间投递和消息类型都需自行实现。

用途:适用于低延迟双向通信场景,如聊天、协同编辑、实时仪表盘;也覆盖带退避与抖动的重连、心跳与关闭码解读、有界队列跨短暂断线投递、类型化消息契约、二进制帧与分块传输、组件树间共享连接。

主要能力与要点:

  • 连接生命周期:CONNECTING→OPEN→CLOSING→CLOSED;onerror 无细节且总跟随 onclose,恢复逻辑只放 onclose。
  • 重连:指数退避加抖动,并对延迟和尝试次数设上限;抖动用于分散同时掉线的客户端。
  • 心跳:定时发送 ping,设置更短的超时,收到 pong 则取消;超时即视为连接已死。
  • 队列:发送前检查 readyState,非 OPEN 时入有界队列,重连后冲刷。
  • 类型化消息:每条消息带 type 字段,用可辨识联合建模,default 分支用 never 做穷尽检查。
  • 二进制:设置 binaryType = "arraybuffer" 以便同步读取;默认 Blob 会强制异步读取。
  • 认证:API 不支持自定义请求头,令牌应放在首帧而非 URL。
  • 房间:协议本身无房间概念,需自行用消息约定加本地成员状态实现。
  • 共享连接:由 provider 持有 socket,按消息类型通过 subscribe(type, handler) 分发并返回各自的取消订阅。
  • bfcache:pagehide 时关闭、pageshow 且 event.persisted 时重连,避免打开连接使页面失去前进后退缓存资格。

使用方式:按场景选择路径——单组件持有连接用 Hook;多组件共享用 provider;状态超过两三种时改用 reducer 状态机。示例代码见 examples/core.md、state-machine.md、binary.md、presence.md,关闭码表与反模式见 reference.md。

限制:HTTPS 页面必须用 wss://;send() 在非 OPEN 状态会抛错或丢消息;bufferedAmount 是唯一的背压信号;WebSocketStream 仅 Chromium 支持;服务端连接注册、广播、消息存储渲染及令牌签发刷新不在本技能范围内。