You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Amazon Device SDK MQTT客户端未检测到断线但AWS端显示连接断开问题

问题根因与解决方案

核心原因

你遇到的是典型的TCP半开连接场景,中间网络设备(如NAT网关、防火墙、路由器)在连接空闲超过阈值后,静默删除了连接会话且未通知两端,导致:

  • AWS IoT Core侧未收到客户端的心跳响应,判定连接丢失触发CONNECTION_LOST
  • 客户端侧未收到连接断开的通知,仍认为连接处于正常状态

从你的AWS日志可验证:连接创建到断开仅间隔21秒,远低于你配置的300秒MQTT心跳间隔,说明中间网络设备的TCP空闲超时阈值远小于你设置的心跳间隔,心跳包还未发送,连接就已被中间设备掐断。

其他可能原因

  • 相同clientId的客户端同时连接,AWS IoT Core会主动踢掉旧连接,若断开通知未到达客户端也会出现该现象
  • 客户端所在网络的出站策略限制了长连接的空闲时长
  • MQTT心跳配置未实际生效,底层TCP保活参数未适配网络环境

修复方案

  1. 调低MQTT心跳间隔,将keepalive参数调整为15~20秒,确保心跳包在中间设备超时前发送,例如:
this.device = awsIot.device({
    // 其他原有配置保持不变
    keepalive: 15, // 从300秒调整为15秒
    tcpKeepAlive: true,
    tcpKeepAliveInterval: 10000 // 底层TCP保活间隔设为10秒
});
  1. 检查是否存在clientId冲突,确保每个设备的clientId全局唯一
  2. 若部署在自有网络环境,调整网关/防火墙的TCP空闲超时阈值,至少大于MQTT心跳间隔的1.5倍

内容的提问来源于stack exchange,提问作者Joel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 01:48:03