我正在使用 MQTT 3.1.1,我在我的电脑上安装了一个蚊子作为本地服务器。
我正在将来自 pubsubclient(MQTT 客户端库)的一些传感器数据发送到蚊子并将其保存到蚊子服务器的数据库
每当我开始会话长达 5-10 分钟时,我都会收到消息,但在那之后 MQTT 客户端无法发送任何消息并自动断开连接。
在断开连接之前,它会在命令行中打印以下消息
client <clientname> has exceeded timeout, disconnecting
Socket error on client <clientname>, disconnecting.
另外我使用默认配置的服务器,除了 QOS 设置为 2
导致此错误的原因以及 我应该怎么做,这样客户端才不会与我的本地服务器断开连接?
正在订阅的节点(如果发布节点花费太长时间再次发布,则可能是发布节点)需要 Connect 调用集上的“keepalive”字段。大多数 MQTT 代理将在大约 5 分钟后超时连接,除非您在设置中修改了超时值。
将“keepalive”选项设置为 30 或 60 秒之类的值将防止 MQTT Broker 断开连接。您的订阅者将开始发送 PINGREQ 数据包,MQTT 代理将回复 PINGRESP 数据包。
在这里阅读更多内容:http://www.steves-internet-guide.com/mqtt-keep-alive-by-example/