连接生命周期
按当前 Gateway 实现处理 CONNECT、CONNACK、心跳、关闭和恢复。
建立连接
Transport open
-> CONNECT(唯一首包)
-> 鉴权与 Session activation
-> CONNACK
-> activeCONNECT必须是唯一首包;同批携带其他包或鉴权等待期间再发包都会关闭连接。- 服务端协商协议版本(当前最新 v6;客户端传
0或高于 v6 时采用 v6),写入 UID、设备以及启用时的加密 Session 状态,再激活在线 Presence。 - 非成功
CONNACK写回后连接关闭。成功CONNACK写失败时,已完成的 activation 会回滚。
CONNACK 成功不等于业务 ready
成功只证明协议 Session 已建立。客户端仍需恢复持久消息、合并本地状态,再开放普通业务发送。
活跃会话
| 方向 | 交互 | 完成边界 |
|---|---|---|
| 客户端 → 服务端 | PING → PONG | 仅心跳响应 |
| 客户端 → 服务端 | SEND → SENDACK | 协议发送结果;不等于对端收到或业务执行 |
| 服务端 → 客户端 | RECV → RECVACK | Session 接收反馈;不等于最终用户已读 |
默认读空闲超时是 3 分钟,只有入站活动刷新期限;服务端出站流量不会刷新。代理或负载均衡器的空闲策略必须容纳有效心跳。
关闭与恢复
ReasonAuthFail或ReasonBan:停止自动重连,先修复凭据或策略状态。ReasonClientKeyIsEmpty或ReasonProtocolUpgradeRequired:先修复客户端配置或版本。ReasonRateLimit、ReasonSystemError或传输中断:仅使用有界退避与抖动,必要时重新发现 Gateway。- 其他失败:保留原始 Reason Code 并 fail closed,不猜测为可重试。
关闭后停止新发送。恢复同一业务发送时复用稳定的 client_msg_no,并发 Wire 尝试使用不同 client_seq;只有 CONNACK 成功且持久消息恢复完成后才重新进入 ready。
当前默认组合启用 Session Payload 加密;CONNECT 缺少 client_key 会返回 ReasonClientKeyIsEmpty。该加密不替代 TLS、产品身份与 Token 校验或 Product HTTP 防护。默认组合也未把已存 Token 自动变成 CONNECT verifier;生产环境必须接入明确的验证与撤销策略。
下一步查看数据包类型和 Reason Code。