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

MQTT.js反复连接断开及大量101请求问题求助

MQTT频繁离线重连及101请求问题解答

1. 大量101请求的原因及状态码含义

  • 101状态码含义:101 Switching Protocols是HTTP标准状态码,代表服务器同意客户端的协议升级请求。你使用的是wss(WebSocket over TLS)协议连接MQTT,所以每次建立连接时,客户端都会先发送HTTP请求,请求将协议从HTTPS升级为WebSocket,服务器返回101响应后,才会切换到WebSocket协议传输MQTT数据,这是正常的连接流程。
  • 大量101请求的根源:从你的控制台日志可以看到,客户端在频繁执行「连接成功→离线→重连」的循环:

MQTT Connect
MQTT Message from Channel
MQTT Offline
MQTT Reconnecting
MQTT Connect
MQTT Offline
MQTT Reconnecting
每次重连都会触发一次HTTP协议升级请求,因此产生大量101响应。

2. 连接反复离线的原因及排查方向

结合你的MQTT.js配置和现象,可能的原因包括以下几点:

  • ClientID重复冲突:你配置的clientId是固定值2906890,MQTT协议规定同一ClientID不能同时连接到服务器,若有其他设备/客户端使用了相同的ClientID,服务器会强制断开旧连接,导致你的客户端离线并触发重连。
  • Keepalive参数不匹配:你设置的keepalive为10秒,即客户端每10秒需向服务器发送心跳包。如果服务器的心跳超时设置过短(比如小于10秒),或者网络延迟导致心跳包未及时送达,服务器会判定连接失效并主动断开。
  • 服务器端限制:MQTT服务器可能配置了连接时长上限、单ClientID连接数限制,或者WebSocket服务的超时设置不合理,导致连接被主动终止。
  • 网络不稳定:客户端与服务器之间的网络存在丢包、高延迟问题,导致MQTT心跳或消息传输中断,触发连接断开。
  • 重连周期过短:你设置的reconnectPeriod为1秒,客户端离线后立即重连,可能在连接尚未稳定时就因之前的问题再次断开,形成恶性循环。

快速排查建议

  • 临时修改clientId为随机值(比如在原有ID后加时间戳),测试是否还会频繁离线,排除ID冲突问题。
  • 调整keepalive至30秒,同时确认服务器端的心跳超时设置为keepalive的1.5-2倍(比如45-60秒)。
  • 查看MQTT服务器的日志,确认连接断开的具体触发方(是客户端主动断开还是服务器踢掉)。
  • 测试客户端到服务器的网络稳定性,用ping myserver查看丢包率和延迟情况。
  • 暂时调大reconnectPeriod至5秒,给连接足够的稳定时间,避免频繁重连加剧问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 04:57:44