2017-07-06 40 views
2

目前正在开发类似“智能家居”的设备,而且我的家中有几种不同的设备。他们都通过MQTT连接到OpenHab。我为我的目的使用Paho MQTT library(Python)。MQTT中的无限存储空间

通常,MQTT具有“keepalive”属性。此属性描述了在订阅主题没有更新时,我的客户端将连接多少时间(AFAIK它将ping发送到服务器)到MQTT服务器。

但在这里,我有一个巨大的问题。需要的主题可以每小时更新一次,甚至每几天/几次更新一次。假设这是室内警报。 如何避免keepalive超时或忽略该字段?它可以是无限的吗?

回答

3

您不知道keepalive值代表什么。

MQTT客户端可以无限期保持连接状态,即使它们不发布或接收任何消息。但经纪人需要跟踪哪些客户仍然连接,以便知道何时向客户发送最后遗嘱和遗嘱(LWT)消息。为了做到这一点,它使用keepalive时间。

每次客户端发送或接收到消息时,代理都会重置定时器,如果此定时器超过时间值的1.5倍,那么代理会将客户端标记为断开并处理LWT。为了防止消息速率非常低的客户断开连接,当定时器达到keepalive值时,代理会向客户端发送PINGREQ数据包,它会从客户端收到一个PINGRESP数据包,证明它仍然活着,然后它会将定时器重置为零并使客户端处于连接状态。