mqtt异步publish方法

mqtt异步publish⽅法
Python基于mqtt异步编程主要⽤到asyncio及第三⽅库hbmqtt,这⾥主要介绍mqtt的异步发布及遇到的⼀些问题。
hbmqtt安装很简单,pip hbmqtt install.
mqtt服务器我使⽤的是mosquitto.
1、主进程
主进程执⾏下⾯语句就实现了协程油箱设计
1 loop = _event_loop()
2 loop.run_until_complete(run())
⾸先是connect,然后publish,整个过程是⼀个协程
1 run():              #协程主函数
2    await connect()室外高增益天线
3while True:
4try:
5            await publish()
6except Exception as ce:
7            ("Sender Error: %s" % ce)
2、Connect
这⾥connect没有使⽤⾃动重连机制connect(),⽽是单独开⼀个协程执⾏掉线后⾃动重连_auto_reconnect
重连函数,每隔1s执⾏⼀次:
1 async def _auto_reconnect(client):
2while True:
3if not ansitions.is_connected():  #如果已经连接上则不执⾏重连
4try:
5                ect()
6except ConnectException:
7pass
糖尿病检测仪
8        await asyncio.sleep(1)
连接函数,仅执⾏⼀次,并启动重连函数协程
1 async def connect():循环水旁滤器
可乐杯2    client = MQTTClient(config={"auto_reconnect": False})      #False时关闭⾃动重连
3try:
4        t(url)
5except ConnectException:
6pass
视频无线传输
7    sure_future(_auto_reconnect(client))
3、Publish:
发布函数⽐较简单,主要就是
1  await client.publish(topic, msg)
4、总结
这⾥重点讲为什么协程时不要⾃动重连,因为如果publish过程中出现断线,需要等待连接成功的event,如果允许⾃动重连"auto_reconnect": True,程序在publish 程序等待信号不退出,⽆法进⼊connect程序执⾏reconnect,这样就永远等不到信号,造成程序死等,类似死机。
如果不允许⾃动重连,单开⼀个协程执⾏重连操作,即使publish协程等待事件,重连协程会使这个事件响应,这样就可以继续发布。
在hbmqtt库⾃带例⼦中多是先connect,然后publish,然后disconnect,以此循环,但主要考虑到连接后不主动断开⼀提⾼程序效率,故没有断开操作。
这个问题的解决⽅式可能有点牵强,园友们有没有遇到过类似的问题,在publish过程中关闭mqtt服务器,再重新打开服务器,发布任务能够继续正常执⾏,如果有好的解决⽅式,还望不吝赐教。

本文发布于:2024-09-22 01:15:34,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/4/254247.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:协程   程序   等待   动重   发布   服务器
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议