文档/zh/build/websocket
审阅 2026-07-14
Markdown
测试版开发 · 参考

WebSocket 事件

把已认证事件作为刷新信号,并在重连后恢复当前状态。

查看 Client 行为预计用时10 分钟
适用范围与来源Mobazha v0.3 候选版本

当前连接边界

默认 Node WebSocket endpoint 是 /ws。路由多个 Node 的 deployment 也可能使用 Node-specific path。Gateway 在连接加入 Node event hub 前完成认证。

Client 行为

  • 使用受支持 client authentication path;存在更安全 protocol 或 header mechanism 时,不把 token 放入 URL。
  • 以有限 backoff 重连,并假定连接缺口会丢失 transient event。
  • 对 persistent notification 去重,并容忍新增的未知 event type。
  • 把 event 作为刷新受保护状态的信号;不得只凭未经验证的 push payload 结算、退款或完成订单。
  • 即使 event 宣布 feature 或 action,也保留 route capability 与 authorization 检查。
javascript
function reconnectDelay(attempt) {
  const capped = Math.min(30_000, 500 * 2 ** attempt);
  return capped / 2 + Math.random() * capped / 2;
}

async function onOrderEvent(orderId) {
  // The event is a refresh signal. Read protected state before acting.
  return api.get('/v1/orders/' + orderId);
}

预期结果

认证后,client 应只收到解析身份与 deployment 允许的 event。短暂断开后以有限 backoff 重连,并确认 client 先通过 HTTP 刷新当前 resource state,再启用操作。如果集成要求每个 transient event 都恰好一次、按业务状态顺序到达,则尚不完整。

Authentication 与 Connection Error

使用部署的 client 与 gateway 支持的认证方式。当有更安全的 session、cookie、header 或 subprotocol 边界时,不要在 WebSocket URL 中放入凭据。认证失败不得降级为匿名管理连接。

  • 断开后使用带 jitter 的 backoff,并限制重试次数。
  • 假定 gap 中会丢 event,重连后核对当前状态。
  • 把 malformed 或 unknown event 当作非权威输入。
  • Event identity、version 或 resource binding 有歧义时,停止自动资金操作。

实现证据