在MQTT中,代理如何得到客户的通知';他最后的遗嘱是什么?

在MQTT中,代理如何得到客户的通知';他最后的遗嘱是什么?,mqtt,Mqtt,问题: 如果MQTT中的所有内容都是pubsub,但感觉要想让最后的遗嘱(LWT)起作用,就必须从某个端点进行长时间的轮询 问题: 在MQTT中,代理如何知道客户机何时离线? LWT上通知代理的流程是什么,是长轮询吗 最后遗嘱和遗嘱MQTT客户端可以注册自定义的“最后遗嘱” 如果他们断开连接,代理将发送“遗嘱”消息。 这些消息可用于在设备启动时向订阅者发送信号 断开连接 MQTT协议具有在连接时设置的保持活动时间。如果在这段时间内客户端没有发布任何消息,客户端将向服务器发送一个pong数据包。

问题: 如果MQTT中的所有内容都是pubsub,但感觉要想让最后的遗嘱(LWT)起作用,就必须从某个端点进行长时间的轮询

问题: 在MQTT中,代理如何知道客户机何时离线? LWT上通知代理的流程是什么,是长轮询吗

最后遗嘱和遗嘱MQTT客户端可以注册自定义的“最后遗嘱” 如果他们断开连接,代理将发送“遗嘱”消息。 这些消息可用于在设备启动时向订阅者发送信号 断开连接


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

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

HiveMQ MQTT Essentials博客系列有关于LWT和保持活动机制的深入文章:


我想补充一点,服务器在连接数据包中指定的保持活动时间段的一倍半内等待PING数据包(服务器给客户端更多的时间)。如果客户端粗暴地关闭连接(例如TCP层上的RST数据包),则会有相同的行为。记得。。。如果客户端发送断开连接消息,则不会发送最后一条will消息。