📜  MQTT (1)

📅  最后修改于: 2023-12-03 15:32:58.499000             🧑  作者: Mango

MQTT介绍

MQTT是一种轻量级的消息传输协议,通常用于物联网设备之间的通信。MQTT协议最初由IBM开发,现在已经成为了OASIS标准。

MQTT协议的主要特点:

  • 轻量级,协议头固定只有两个字节,消息体可变长度
  • 支持长连接和心跳包,能够实现可靠传输
  • 支持QoS级别,可靠性更高
  • 支持消息保留和遗嘱消息
  • 提供了订阅/发布的消息模式,能够实现多个客户端之间的通信
MQTT基础组件

MQTT包含三个基础组件:客户端、代理服务器和主题(Topic)。

客户端

客户端通常是物联网设备或者应用程序,使用MQTT协议与代理服务器进行通信。客户端可以是发布者或者订阅者,或者同时兼具这两种角色。

代理服务器

代理服务器(Broker)接收和转发客户端之间的消息,同时负责管理主题和订阅关系。代理服务器可以实现集群部署,提高可靠性和可用性。

主题(Topic)

主题是MQTT消息通信的核心概念,它类似于一个频道,用于标识一组相关的消息。客户端可以订阅某个主题,也可以向某个主题发布消息。主题通常使用层级结构,用斜杠(/)分隔。

MQTT消息发布与订阅

MQTT的消息模型采用了发布与订阅(Pub/Sub)的模式,客户端可以发布消息到某个主题,也可以订阅某个主题,接收该主题下的所有消息。

消息发布

消息发布者将消息发送到指定的主题上,指定主题时可以使用通配符。消息发布者可以选择消息的QoS等级和是否需要保留消息。

import paho.mqtt.client as mqtt

def on_connect(client, userdata, flags, rc):
    print("Connected with result code "+str(rc))

client = mqtt.Client()
client.on_connect = on_connect
client.connect("localhost", 1883, 60)

client.publish("topic/test", "Hello MQTT", qos=1, retain=True)
消息订阅

消息订阅者订阅某个主题后,会接收该主题下的所有消息。订阅主题时可以使用通配符。

import paho.mqtt.client as mqtt

def on_connect(client, userdata, flags, rc):
    print("Connected with result code "+str(rc))
    client.subscribe("topic/#")

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, 60)

client.loop_forever()
总结

MQTT是一种轻量级的消息传输协议,具有可靠性高、传输效率高等优点,常用于物联网设备之间的通信。MQTT的消息模型采用了发布与订阅的模式,可以实现多个客户端之间的通信。无论是客户端还是代理服务器,MQTT的代码实现都非常简单,非常适合快速进行物联网开发。