python mqtt 处理消息返回http报文,mqtt 发送并接受message的python实现

需要使用两个知识点,一个是多线程,一个是队列queue。

需要先开一个线程,该线程是订阅topic,然后等待消息。

另外一个线程,就是发布消息。

比较坑的是mqtt的python包,只说了回调函数on_message,但是该回调是通过subscribe函数调用的,无法返回message到主程序。

经过多次尝试,最后想到用queue,在on_message中put message,然后在主函数中get message,再在返回message。

on_message函数将消息写入queue

def on_message(client, userdata, msg):

mss = str((msg.payload).decode('utf-8'))

print(mss)

mp.put(mss)

主函数get后返回给主程序,并且开了两个线程

def mqtt_send_check(client, topic, msg):

client.loop_start()

thread_sub = threading.Thread(target=mqtt_subscribe, args=(client,topic))

thread_sub.start()

thread_pub = threading.Thread(target=mqtt_publish, args=(client,topic,msg))

thread_pub.start()

time.sleep(4)

client.loop_stop()

return(mp.get())

pytest测试程序

class Test_comm:

TOPIC_REPORT = PRODUCT_KEY + "/" + DEVICE_NAME + "/abc"

def test_comm(self):

MSG = "aaa"

client = mqtt_connect(MQTT_SERVER_ADDR, MQTT_SERVER_PORT,PRODUCT_KEY, DEVICE_NAME,DEVICE_SECRET, TIMESTAMP)

pps = mqtt_send_check(client, self.TOPIC_REPORT, MSG)

print('pps:',pps)

pytest程序通过这种方式,可以得到message消息,实现断言了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值