Skip to content

Bridge 传输层

Bridge 支持多种传输方式,适应不同网络环境。

代码位置: 传输实现在 src/cli/transports/ 目录下(非 src/bridge/)。

传输方式对比

传输文件位置读取写入适用场景
WebSocketWebSocketTransport.tscli/transports/WSWS标准双向
SSESSETransport.tscli/transports/SSEHTTP POST防火墙限制
HybridHybridTransport.tscli/transports/WSHTTP POST最佳可靠性

WebSocket 传输

WebSocketTransportsrc/cli/transports/WebSocketTransport.ts)实现双向 WebSocket 通信。

特性:

  • 使用 CircularBuffer 缓存消息
  • 重连状态机,默认 10 分钟重连预算(DEFAULT_RECONNECT_GIVE_UP_MS = 600_000
  • 永久关闭码集合(PERMANENT_CLOSE_CODES = new Set([1002, 4001, 4003])
  • 睡眠检测(SLEEP_DETECTION_THRESHOLD_MS
  • 自动检测 Bun/Node 运行时并使用对应的 WebSocket 实现
  • 心跳/keepalive 机制

SSE 传输

SSETransportsrc/cli/transports/SSETransport.ts)使用 SSE 读取 + HTTP POST 写入。

  • 读取:使用 AbortController + fetch 架构(非 axios),通过 SSE 帧解析器处理流式数据
  • 写入:HTTP POST 发送 JSON 消息

Hybrid 传输

HybridTransportsrc/cli/transports/HybridTransport.ts)继承自 WebSocketTransport(非组合模式)。

  • 读取:通过 WebSocket(低延迟)
  • 写入:通过 SerialBatchEventUploader HTTP POST(可靠性)

SerialBatchEventUploader 实现事件队列 → 延迟合批 → HTTP POST,失败重试,串行化保证顺序。

轮询配置

轮询间隔配置通过 pollConfig.tspollConfigDefaults.ts 管理。实际字段名包括 session_keepalive_interval_v2_msnon_exclusive_heartbeat_interval_ms 等,与会话类型和状态相关。

JWT 工具

jwtUtils.ts 提供 JWT 解析工具,包括 decodeJwtPayloaddecodeJwtExpiry 函数,以及 createTokenRefreshScheduler() 用于调度 token 刷新。