python mqtt服务端和客户端

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()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值