限流与重试
WebSocket 限流用于保护长连接、认证凭证和设备控制通道。
客户端应把限流视为正常保护机制,而不是服务异常。
限流范围
| 范围 | 说明 |
|---|---|
创建 wsTicket | 限制短时间内频繁创建一次性连接凭证 |
| 建立 WebSocket 连接 | 限制频繁建连、断连和重连 |
session.ping | 限制过高频率的应用层心跳 |
| 请求主题 | 限制同一连接内的高频请求 |
| 设备控制 | 限制对同一设备或同一继电器的高频控制 |
推荐频率
| 场景 | 推荐值 |
|---|---|
session.ping | 每 30 秒一次 |
| 断线重连 | 使用指数退避,并加入随机抖动 |
创建 wsTicket | 仅在建连前创建,不提前批量创建 |
| 状态查询 | 优先使用事件更新,避免紧密循环查询 |
Rate Limited
当 WebSocket 请求触发限流时,服务可能返回 session.error:
json
{
"type": "event",
"topic": "session.error",
"data": {
"code": "RATE_LIMITED",
"message": "Rate limit was exceeded."
}
}如果是 POST /wlte/v1/ws/ticket 触发限流,HTTP 响应使用 429 RATE_LIMITED。
客户端处理
- 收到
RATE_LIMITED后应降低请求频率 - 重连应使用指数退避,不要立即循环重连
- 创建
wsTicket失败后,不要并发重复创建 - 如果是设备控制触发限流,客户端应等待当前操作结果稳定后再发起下一次操作
与 HTTP 限流的关系
POST /wlte/v1/ws/ticket 是 REST 端点,遵循 REST API 的 限流与重试。
WebSocket 连接建立后的请求和事件遵循本页规则。
