网站中的关键词seo设置,中国跨境电商前三名,it外包企业,内蒙古建设厅网站首页Python系列 - MQTT协议
资源连接
MQTT的介绍和应用场景的示例说明
一、什么是MQTT
百度关于MQTT的介绍如下#xff1a; MQTT(消息队列遥测传输)是ISO 标准(ISO/IEC PRF 20922)下基于发布订阅范式的消息协议。它工作在 TCP/IP协议之上#xff0c;是为硬件性能低下的远程设…Python系列 - MQTT协议
资源连接
MQTT的介绍和应用场景的示例说明
一、什么是MQTT
百度关于MQTT的介绍如下 MQTT(消息队列遥测传输)是ISO 标准(ISO/IEC PRF 20922)下基于发布订阅范式的消息协议。它工作在 TCP/IP协议之上是为硬件性能低下的远程设备以及网络状况糟糕的情况下而设计的发布/订阅型消息协议 MQTT是一个基于客户端-服务器的消息发布/订阅传输协议。MQTT协议是轻量、简单、开放和易于实现的。 MQTT适用范围非常广泛。在很多情况下包括受限的环境中如机器与机器M2M通信和物联网IoT。其次通过卫星链路通信传感器、偶尔拨号的医疗设备、智能家居、及一些小型化设备中已广泛使用。
二、 MQTT的特点
MQTT协议是为大量计算能力有限且工作在低带宽、不可靠的网络的远程传感器和控制设备通讯而设计的协议因此它具有以下主要的几项特性 轻量级和高效MQTT协议的客户端代码量小对系统资源的需求较低。小型传输开销很小固定长度的头部是 2 字节协议交换最小化以降低网络流量提高了传输效率。 支持双向通信MQTT协议支持设备到云端以及云端到设备之间的消息传递使得向大量设备广播消息变得相对简单。 数据传输可靠MQTT支持多种消息服务质量等级QoS确保数据按需可靠传输。QoS 0表示最多发送一次QoS 1表示至少发送一次QoS 2表示确保消息只有一次到达。 支持离线消息通过保留消息和持久会话MQTT支持设备离线时的消息保存和转发。 简单易用MQTT协议使用 TCP/IP 提供网络连接结构简单易于实现和维护适合低带宽和不可靠的网络环境。 发布/订阅模式MQTT基于发布/订阅模式消息通过主题进行分类。客户端可以订阅一个或多个主题发布者发送消息到特定的主题所有订阅该主题的客户端都将接收到这些消息通过提供一对多的消息发布解除应用程序耦合。
三、 MQTT的工作流程
MQTT的信息基于发布和订阅模式通过主题进行相应的分类基于发布订阅模式及其代理服务器的理解示意图 基于MQTT的发布订阅模式下其工作流程如下 其中MQTT传输的内容包括两个部分
主题Topic:主题可以理解为信息的主题订阅者订阅(Subscribe)后就会收到该主题的内容(payload);负载(payload):可以理解为信息的内容是指订阅的具体要使用的内容。
四、MQTT的工作模式
MQTT提供三种工作模式来保证数据的传输三种工作模式和应用场景介绍如下:
至多一次丢掉记录无所谓的场景至少一次确保信息到达但信息可能会重复只有一次确保消息到达一次(小型传输开销小)
五、MQTT的应用场景
MQTT的在如下三种场景下具有明显的优势
带宽低网络延迟高网络通信不稳定
由于MQTT在三大场景下的优势使得MQTT特别适合物联网IoT和类似场景 物联网IoTMQTT是物联网领域中最典型的应用之一。在物联网中大量的设备和传感器需要进行数据的收集、监控和控制。MQTT协议的特性使其成为物联网通信的理想选择。例如智能家居系统可以使用MQTT来监控和控制家中的各种设备如智能灯泡、恒温器等。 工业控制和远程监测MQTT在工业控制和远程监测领域也有广泛的应用。它的可靠性和低带宽消耗特性使其非常适合在工业环境中进行实时数据传输和远程控制。例如工业设备监控可以通过MQTT实时将数据上传至云端或控制中心用于生产线状态监控、设备维护预警等。 即时通讯和实时数据传输MQTT的低延迟和可靠性使其成为即时通讯和实时数据传输的理想选择。例如聊天室和实时消息推送应用可以使用MQTT来实现用户之间的实时通讯。此外MQTT还适用于需要实时数据传输的应用如实时股票行情、天气数据等。 实时位置追踪MQTT可以用于实时位置追踪应用。移动设备可以发布自己的位置信息其他用户或系统可以订阅这些信息来获取实时位置数据。这对于车队管理、物流跟踪等应用非常有用。 其他场景MQTT还应用于传感器数据传输、数据传输和同步、远程监控和控制系统等领域。例如气象站、环境监测等领域可以使用MQTT进行传感器数据的采集和传输跨平台数据同步、数据备份等场景也可以利用MQTT实现数据的实时同步。
六、python代码实现订阅 #!/usr/bin/env python # 基于Pika实现对MQTT的通信import pika import sys import jsonchannel conn.channel()channel.exchange_declare(exchangetest.topic,exchange_typetopic,durableTrue) #订阅的topicresult channel.queue_declare(queue2570,durableTrue,auto_deleteFalse,exclusiveFalse) queue_name result.method.queuechannel.queue_bind(exchangetest.topic, queuequeue_name, routing_keyorder.PM02.2570)print( [*] Waiting for logs. To exit press CTRLC)def callback(ch, method, properties, body):#print( [x] %r:%r % (method.routing_key, body))j_text json.loads(body)print(j_text)#j_Order j_text[maintOrder]#print(j_Order)j_PM j_text[pmType]print(j_PM) # 执行订阅程序channel.basic_consume(queuequeue_name, on_message_callbackcallback, auto_ackTrue) try:channel.start_consuming() except Exception as e :print(e)channel.start_consuming()参考 MQTT MQTT协议 mqtt的应用场景有哪些