`
rensanning
  • 浏览: 3548591 次
  • 性别: Icon_minigender_1
  • 来自: 大连
博客专栏
Efef1dba-f7dd-3931-8a61-8e1c76c3e39f
使用Titanium Mo...
浏览量:38145
Bbab2146-6e1d-3c50-acd6-c8bae29e307d
Cordova 3.x入门...
浏览量:607306
C08766e7-8a33-3f9b-9155-654af05c3484
常用Java开源Libra...
浏览量:682329
77063fb3-0ee7-3bfa-9c72-2a0234ebf83e
搭建 CentOS 6 服...
浏览量:89350
E40e5e76-1f3b-398e-b6a6-dc9cfbb38156
Spring Boot 入...
浏览量:401851
Abe39461-b089-344f-99fa-cdfbddea0e18
基于Spring Secu...
浏览量:69693
66a41a70-fdf0-3dc9-aa31-19b7e8b24672
MQTT入门
浏览量:91712
社区版块
存档分类
最新评论

MQTT入门(8)- 保留消息和最后遗嘱

 
阅读更多
(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了。
1
0
分享到:
评论

相关推荐

    mqtt-xmeter-2.0.2-jar-with-dependencies.zip

    4. **保留消息**:服务器可以将消息保留一段时间,新订阅者加入时可以立即收到这些消息。 5. **会话持久化**:MQTT客户端断开连接后,服务器可以保存其状态,以便下次连接时恢复。 接着,探讨XMeter如何测试MQTT...

    MQTT-3.1.1-CN.zip_MQTT-3.1.1-CN_MQTT-3.1.1-CN.pdf_mqtt 3.1.1 文档

    MQTT中文文档,帮助理解MQTT具体协议,用于创建服务器或者客户端

    mqtt-xmeter-2.0.2-jar-with-dependencies.jar下载

    "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.rar”包含了一个名为“mqtt-xmeter-syl-jar-with-dependencies”的文件,这很可能是一个Java应用,用于测试和分析MQTT协议的性能。 首先,我们来深入了解MQTT协议...

    mqtt-client-0.4.0

    mqtt-client-0.4.0.jar

    MQTT-3.1.1-CN(学习MQTT协议的完整中文资料)

    例如,文档中提到的MQTT-3.1.1版本,这个版本主要的改动包括增强了协议规范和改进了协议的互操作性。 由于MQTT协议具有良好的扩展性和灵活性,它在物联网(IoT)领域得到了广泛的应用。物联网中的设备往往受限于...

    paho.mqtt.embedded-c-master.zip_MQTT编程_c mqtt linux_mqtt_paho mq

    Paho是IBM和Oracle发起的一个开源项目,旨在提供一组支持多种开放标准的消息传递协议(如MQTT)的客户端库。MQTT是一种轻量级的发布/订阅消息协议,广泛应用于物联网(IoT)设备和低带宽、高延迟或不可靠的网络环境中...

    mqtt-xmeter-jar-with-dependencies.jar

    jmeter-mqtt插件应用于Jmeter对mqtt服务器压力测试

    mqtt-xmeter-2.0.2-jar-with-dependencies.jar

    MQTT (Message Queue Telemetry Transport),翻译成中文就是,遥测传输协议,其主要提供了订阅/发布两种消息模式,更为简约、轻量,易于使用,特别适合于受限环境(带宽低、网络延迟高、网络通信不稳定)的消息分发...

    paho.mqtt.c-1.3.5.tar.gz

    此外,订阅者可以设置持久订阅,即使客户端断开连接,当有新消息到达时,代理仍会为其保留。 5. **主题(Topic)**:主题是消息的路由路径,具有层次结构,类似文件系统的路径。客户端可以对一个或多个主题进行订阅...

    mqtt.fx-1.7.1-windows-x64位安装包

    "完美使用"的描述意味着该版本在兼容性和稳定性上已经达到了较高的水平,用户可以顺利地进行MQTT消息的发布和订阅操作。 在mqtt.fx中,你可以连接到任何支持MQTT协议的服务器,通常称为MQTT Broker。它提供了丰富的...

    paho.mqtt.c-master.zip_C++ MQTT_C++实现MQTT_drawvvw_mqtt_mqtt c语言

    - **发布消息**:调用`MQTTClient_publish()`,指定主题和消息内容。 - **订阅主题**:使用`MQTTClient_subscribe()`,指定要订阅的主题和QoS级别。 - **接收消息**:注册回调函数处理接收到的消息,使用`MQTT...

    MQTT-Client-master.rar_MQTT 服务器_MQTT client_MQTT-master_mqtt 客户

    总的来说,“MQTT-Client-master.rar”提供的MQTT客户端源码是一个学习和测试MQTT协议的好资源,无论你是初学者还是经验丰富的开发者,都能从中获益。通过深入研究源码,你可以掌握如何构建MQTT客户端,以及如何优化...

    paho.mqtt.cpp-master.zip

    MQTT是一种轻量级的发布/订阅式消息传输协议,常用于物联网(IoT)、机器对机器(M2M)通信以及低带宽、高延迟或不稳定网络环境下的应用。 **1. MQTT协议介绍** MQTT的核心特性是它的简单性和高效性,使得设备能够高效...

    mqtt-client-1.3-API文档-中文版.zip

    赠送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 对应...

    paho.mqtt.embedded-c-master.zip

    8. **跨平台**:尽管名为“嵌入式-C”,但Paho MQTT库也可用于非嵌入式环境,如Linux、Windows等,具备良好的跨平台性。 在实际项目中,开发者可以利用Paho MQTT嵌入式C库来建立设备与云端或设备间的通信,例如智能...

    paho.mqtt.c-1.3.0.zip

    Paho MQTT C库是针对C语言编写的,为开发者提供了一种在各种嵌入式系统和微控制器上实现MQTT协议的解决方案。 **MQTT协议核心概念** 1. **发布/订阅模型**:在MQTT中,数据传输基于发布者和订阅者的模式。发布者...

    MQTT-3.1.1-CN.pdf

    **MQTT(Message Queuing Telemetry Transport)**是一种轻量级的发布/订阅式消息传输协议,主要用于物联网(IoT)和机器对机器(M2M)通信。它设计的目标是简单、开放、规范,使其在资源有限的环境中也能高效运作。...

    mqtt-client-1.5-uber.jar

    mqtt-client-1.5-uber.jar

Global site tag (gtag.js) - Google Analytics