📜  MQTT的基本功能(1)

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

MQTT的基本功能

MQTT(Message Queuing Telemetry Transport)是一种轻量级的消息通信协议,特别适合用于低带宽或不稳定网络环境中的物联网设备通信。MQTT协议已经成为物联网领域中广为使用的协议之一。

协议通信模式
客户端-服务端

MQTT通信中的客户端和服务端是指消息发布者和消息订阅者之间的角色。客户端发送消息,而服务端负责管理和分发这些消息。

发布-订阅模式

在MQTT中,消息发布者将消息发布到一个主题(topic)上,而消息订阅者则订阅这个主题。一条消息可以同时被多个订阅者消费。

消息传输机制
Quality of Service

MQTT协议支持三种不同的消息传输质量(Quality of Service,QoS),可以根据不同的应用场景进行选择。

  • QoS 0:最多一次传递。消息可能会丢失或重复传输。
  • QoS 1:至少一次传递。确保消息被接收,但可能传递多次。
  • QoS 2:只有一次传递。确保消息被接收,并且仅传递一次。
Last Will and Testament

MQTT协议还支持Last Will and Testament(LWT)机制,即客户端断开连接后向服务端发送一条遗嘱消息。当客户端意外终止时,服务端可以通过收到遗嘱消息来知晓客户端已经离线,从而进行相应的处理。

连接流程

MQTT协议的连接流程如下所示:

  1. TCP连接:客户端通过TCP连接到MQTT服务端,默认端口号为1883。
  2. 协议握手:客户端向服务端发送Connect报文,同时携带一些必要信息,例如:ClientId、CleanSession、WillMessage等。其中ClientId是客户端必须携带的一个唯一标识符。
  3. 订阅主题:客户端向服务端发送Subscribe报文,订阅一个或多个主题。
  4. 接收消息:一旦有消息发布到已订阅的主题上,服务端会将消息发送给所有订阅者。
  5. 断开连接:客户端通过发送Disconnect报文来关闭连接。
示例代码

以下是一个使用Paho MQTT Python库进行MQTT通信的示例代码:

import paho.mqtt.client as mqtt

# 连接回调函数
def on_connect(client, userdata, flags, rc):
    print("Connected")

# 发布回调函数
def on_publish(client, userdata, mid):
    print("Published")

# 订阅回调函数
def on_subscribe(client, userdata, mid, granted_qos):
    print("Subscribed")

# 接收消息回调函数
def on_message(client, userdata, msg):
    print(msg.topic + ":" + str(msg.payload))

# 创建客户端
client = mqtt.Client()

# 设置回调函数
client.on_connect = on_connect
client.on_publish = on_publish
client.on_subscribe = on_subscribe
client.on_message = on_message

# 连接服务端
client.connect("127.0.0.1", 1883, 60)

# 发布消息
client.publish("topic/test", "hello mqtt")

# 订阅主题
client.subscribe("topic/test")

# 循环监听消息
client.loop_forever()

以上示例代码演示了如何创建一个MQTT客户端并进行连接、发布和订阅操作。实际使用中,需要根据具体的应用场景进行相应的设置和调整。