mqtt服务端:
pip install hbmqtt
服务端代码在jupyter中运行会报错,得直接用python运行。
import asyncio
from hbmqtt.broker import Broker
# 定义 MQTT 服务端配置
broker_config = {
"listeners": {
"default": {
"type": "tcp",
"bind": "127.0.0.1:1883", # 监听地址和端口
}
},
"sys_interval": 10, # 系统状态发布间隔
"topic-check": { # 主题检查配置
"enabled": True,
"plugins": ["hbmqtt.plugins.topic_checking:TopicChecker"],
"policies": {
"test/topic": "allow", # 允许发布和订阅的主题
"#": "deny", # 默认拒绝所有其他主题
},
},
}
# 创建 MQTT 服务端实例
broker = Broker(broker_config)
# 启动 MQTT 服务端
async def start_server():
await broker.start()
print("MQTT 服务端已启动,等待连接...")
# 运行事件循环
if __name__ == "__main__":
loop = asyncio.get_event_loop()
loop.run_until_complete(start_server())
loop.run_forever()
MQTT客户端:
pip install paho-mqtt
为了模拟客户端发消息,我使用了线程,在线程中持续发消息。
import paho.mqtt.client as mqtt
import threading
import time
# 定义回调函数:当客户端连接时调用
def on_connect(client, userdata, flags, rc):
print(f"客户端已连接,返回码: {rc}")
# 订阅主题
client.subscribe("test/topic")
# 定义回调函数:当接收到消息时调用
def on_message(client, userdata, msg):
print(f"收到消息: {msg.payload.decode()} ,主题: {msg.topic}")
# 创建 MQTT 客户端实例
client = mqtt.Client()
# 设置回调函数
client.on_connect = on_connect
client.on_message = on_message
# 连接到 MQTT 服务端
client.connect("127.0.0.1", 1883, 60)
# 发布消息
client.publish("test/topic", "Hello, hbmqtt!")
def sendmsg():
while True:
client.publish("test/topic", "Hello, hbmqtt!888888888")
time.sleep(2)
print("...")
thread = threading.Thread(target=sendmsg)
thread.start()
# 保持连接并处理消息
print("MQTT 客户端已启动,等待消息...")
client.loop_forever()
# client.loop_start()
# client.publish("test/topic", "Hello, hbmqtt!888888888")
# client.loop_stop()