2017-07-06 59 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數據包,證明它仍然活着,然後它會將定時器重置爲零並使客戶端處於連接狀態。