在 MQTT 中,代理如何收到客户遗嘱的通知?

In MQTT, how does the broker get notified of a client's Last Will and Testament?

问题: 如果 MQTT 中的所有内容都是 pubsub,但感觉 Last Will and Testament (LWT) 可以工作,那么必须从某个端进行长轮询吗?

问题: 在 MQTT 中,broker 如何知道客户端何时下线? 还有LWT上通知broker的流程是什么,是长轮询吗?

last will test documentation

Last Will And Testament MQTT clients can register a custom “last will and testament” message to be sent by the broker if they disconnect. These messages can be used to signal to subscribers when a device disconnects.

MQTT 协议有一个在连接时设置的保持活动时间。如果在那段时间内客户端没有发布任何消息,客户端将向服务器发送一个 pong 数据包。如果服务器在这段时间内没有获得发布或 ping,它将客户端标记为断开连接并将 LWT 消息传递给订阅相关主题的任何其他客户端。

MQTT有keep alive机制(本质上就是心跳)。当客户端连接时,可以指定该特定客户端的保持活动值。如果客户端在指定时间的一半时间内处于空闲状态并且没有发送任何心跳或任何其他 MQTT 消息,则代理假定 TCP 连接已断开(= 半开)。

HiveMQ MQTT Essentials Blog Series 对 LWT 和 keep-alive 机制有深入的文章: