(1)保留消息Retained Messages
MQTT中,无论是发布还是订阅都不会有任何触发事件。
1个Topic只有唯一的retain消息,Broker会保存每个Topic的最后一条retain消息。
每个Client订阅Topic后会立即读取到retain消息,不必要等待发送。
订阅Topic时可以使用通配符,就会收到匹配的每个Topic的retain消息。
发布消息时把retain设置为true,即为保留信息。
如果需要删除retain消息,可以发布一个空的retain消息,因为每个新的retain消息都会覆盖最后一个retain消息。
主要应用:
1)如果订阅者无法和Broker连接,可以通过retain消息让订阅者在下次成功连接时一次性接收所有的内容
2)发布者定时发布retain消息,订阅者获取该信息后能推测发布者的状态(
last good value)
(2)最后遗嘱LWT(Last Will & Testament)
MQTT本身就是为信号不稳定的网络设计的,所以难免一些客户端会无故的和Broker断开连接。
当客户端连接到Broker时,可以指定LWT,Broker会定期检测客户端是否有异常。
当客户端异常掉线时,Broker就往连接时指定的topic里推送当时指定的LWT消息。
LWT的相关信息在连接时可以设置:
client = mqtt.Client()
client.will_set('test/rensanning/will', 'Last will message', 0, False)
client.connect('localhost', 1883)
LWT经常和保留消息一起使用,把每个客户端的状态保存到一个Topic下。
比如:可以在 client1/status 里保存online或者offline的信息。
pub_lwt.py
# coding=utf8
import paho.mqtt.client as mqtt
import time
def on_connect(client, userdata, flags, rc):
print("Connected with result code "+str(rc))
client = mqtt.Client()
client.on_connect = on_connect
client.will_set('test/rensanning/will', 'Last will message', 0, False)
client.connect("localhost", 1883)
client.loop_start()
msg = "test LWT " +time.ctime()
client.publish("test/rensanning/time", msg, 0)
print("message published")
#client.disconnect()
client.loop_stop()
print "done."
sub_lwt.py
# coding=utf8
import paho.mqtt.client as mqtt
def on_connect(client, userdata, flags, rc):
print("Connected with result code "+str(rc))
client.subscribe("test/rensanning/#")
def on_message(client, userdata, msg):
print(msg.topic+" "+str(msg.payload))
client = mqtt.Client()
client.on_connect = on_connect
client.on_message = on_message
client.connect("localhost", 1883)
client.loop_forever()
执行以上 sub_lwt.py 和 pub_lwt.py 就会看到接收到两条消息,最后一条就是LWT。
但是如果把pub_lwt.py里注释的 client.disconnect() 放开,就接收不到LWT了。
分享到:
相关推荐
4. **保留消息**:服务器可以将消息保留一段时间,新订阅者加入时可以立即收到这些消息。 5. **会话持久化**:MQTT客户端断开连接后,服务器可以保存其状态,以便下次连接时恢复。 接着,探讨XMeter如何测试MQTT...
MQTT中文文档,帮助理解MQTT具体协议,用于创建服务器或者客户端
"mqtt-xmeter-2.0.2-jar-with-dependencies.jar" 文件就是这样的一个扩展,它使得JMeter能够支持对MQTT协议的测试。 这个jar文件包含了所有必要的依赖,使用户无需额外安装其他库即可在JMeter中执行MQTT相关的测试...
本压缩包“mqtt-xmeter-syl-jar-with-dependencies.rar”包含了一个名为“mqtt-xmeter-syl-jar-with-dependencies”的文件,这很可能是一个Java应用,用于测试和分析MQTT协议的性能。 首先,我们来深入了解MQTT协议...
mqtt-client-0.4.0.jar
例如,文档中提到的MQTT-3.1.1版本,这个版本主要的改动包括增强了协议规范和改进了协议的互操作性。 由于MQTT协议具有良好的扩展性和灵活性,它在物联网(IoT)领域得到了广泛的应用。物联网中的设备往往受限于...
Paho是IBM和Oracle发起的一个开源项目,旨在提供一组支持多种开放标准的消息传递协议(如MQTT)的客户端库。MQTT是一种轻量级的发布/订阅消息协议,广泛应用于物联网(IoT)设备和低带宽、高延迟或不可靠的网络环境中...
jmeter-mqtt插件应用于Jmeter对mqtt服务器压力测试
MQTT (Message Queue Telemetry Transport),翻译成中文就是,遥测传输协议,其主要提供了订阅/发布两种消息模式,更为简约、轻量,易于使用,特别适合于受限环境(带宽低、网络延迟高、网络通信不稳定)的消息分发...
此外,订阅者可以设置持久订阅,即使客户端断开连接,当有新消息到达时,代理仍会为其保留。 5. **主题(Topic)**:主题是消息的路由路径,具有层次结构,类似文件系统的路径。客户端可以对一个或多个主题进行订阅...
"完美使用"的描述意味着该版本在兼容性和稳定性上已经达到了较高的水平,用户可以顺利地进行MQTT消息的发布和订阅操作。 在mqtt.fx中,你可以连接到任何支持MQTT协议的服务器,通常称为MQTT Broker。它提供了丰富的...
- **发布消息**:调用`MQTTClient_publish()`,指定主题和消息内容。 - **订阅主题**:使用`MQTTClient_subscribe()`,指定要订阅的主题和QoS级别。 - **接收消息**:注册回调函数处理接收到的消息,使用`MQTT...
总的来说,“MQTT-Client-master.rar”提供的MQTT客户端源码是一个学习和测试MQTT协议的好资源,无论你是初学者还是经验丰富的开发者,都能从中获益。通过深入研究源码,你可以掌握如何构建MQTT客户端,以及如何优化...
MQTT是一种轻量级的发布/订阅式消息传输协议,常用于物联网(IoT)、机器对机器(M2M)通信以及低带宽、高延迟或不稳定网络环境下的应用。 **1. MQTT协议介绍** MQTT的核心特性是它的简单性和高效性,使得设备能够高效...
赠送jar包:mqtt-client-1.3.jar; 赠送原API文档:mqtt-client-1.3-javadoc.jar; 赠送源代码:mqtt-client-1.3-sources.jar; 包含翻译后的API文档:mqtt-client-1.3-javadoc-API文档-中文(简体)版.zip 对应...
8. **跨平台**:尽管名为“嵌入式-C”,但Paho MQTT库也可用于非嵌入式环境,如Linux、Windows等,具备良好的跨平台性。 在实际项目中,开发者可以利用Paho MQTT嵌入式C库来建立设备与云端或设备间的通信,例如智能...
Paho MQTT C库是针对C语言编写的,为开发者提供了一种在各种嵌入式系统和微控制器上实现MQTT协议的解决方案。 **MQTT协议核心概念** 1. **发布/订阅模型**:在MQTT中,数据传输基于发布者和订阅者的模式。发布者...
**MQTT(Message Queuing Telemetry Transport)**是一种轻量级的发布/订阅式消息传输协议,主要用于物联网(IoT)和机器对机器(M2M)通信。它设计的目标是简单、开放、规范,使其在资源有限的环境中也能高效运作。...
mqtt-client-1.5-uber.jar