外观
Socket 如何设计心跳 断线重连和重复命令处理?
标准回答
用心跳或协议活动判断会话活性,连续超时达到策略条件后断开;重连采用有上限的退避与随机抖动;用请求序号和业务幂等规则处理重复消息。网络切换后应重新确认连接、身份和状态,不能只把旧 Socket 标为已连接。
机制解释
心跳周期需要平衡故障发现速度与功耗,不能所有场景每秒发一次。TCP 的可靠传输不代表“设备命令只执行一次”;连接断开时,有些命令可能已经执行,只是响应没回到手机。
延伸追问
ACK 与业务结果有什么区别?ACK 可能仅表示收到、校验通过或进入队列,业务结果才表明执行成功。协议需要定义每种确认的语义,客户端分别管理发送超时、确认超时与业务完成超时。
内容来源
- Android 智能硬件 SDK 技术 Wiki · 原条目
Q49