目前正在开发类似“智能家居”之类的东西,而我家里的设备很少。所有这些都OpenHab通过连接到MQTT。Paho MQTT library我出于目的使用(Python)。
通常,MQTT具有“ keepalive”属性。此属性描述当订阅的主题上没有更新时,我的客户端将连接到MQTT服务器的时间(AFAIK将ping发送到服务器)。
但是这里我有一个大问题。所需主题可以每小时更新一次,甚至每几天/每月更新一次。假设这是室内警报器。如何避免出现keepalive超时或忽略该字段?可以是无限的吗?
您已经错过了理解keepalive值代表的含义。
MQTT客户端即使不发布或接收任何消息,也可以无限期保持连接状态。但是,经纪人需要跟踪仍在连接哪些客户端,以便它知道何时为该客户端发送“最后遗嘱”(LWT)消息。为此,它使用keepalive时间。
每次客户端发送或接收消息时,代理都会重置计时器,如果该计时器超过时间值的1.5倍,则代理会将keepalive客户端标记为已断开并处理LWT。为防止消息速率非常低的客户端断开连接,代理将在计时器达到该keepalive值时将PINGREQ数据包发送给客户端,它从客户端收到一个PINGRESP数据包,证明它仍然有效,然后将计时器重置为零。并使客户端保持连接状态。