随着人工智能、大数据兴起的,Python 凭借着优雅的语言风格,丰富的库,以及平缓的入门曲线,搭上了时代的顺风车,成为了最热门的计算机编程语言之一,开始深入到物联网等各个领域中。
Python 上有许多优秀的 MQTT 客户端库,借助它们,我们可以以极少量的代码开发一个 MQTT 客户端应用。
本文收集了三个常见的 Python MQTT 客户端库,并从库的开发、使用复杂度等几个角度进行简单的对比以方便读者进行选择。同时,文章里也提供了简单的 Python 示例,您可以将示例代码复制到编缉器中直接运行(需要 Python 3.5+,并安装对应的依赖包)。
paho-mqtt
paho-mqtt 可以说是 Python MQTT 开源客户端库中的佼佼者。它由 Eclipse 基金会主导开发,除了 Python 库以外,同样支持各大主流的编程语言,比如 C++、Java、JavaScript、Golang 等。目前 Python 版本已经实现了 3.1 和 3.1.1 MQTT 协议,在最新开发版中实现了 MQTT 5.0。
在基金会的支持下,以每年一个版本的速度更新,本文发布时的最新版本为 1.5.0(于 2019 年 8 月发布)。
在 GitHub 主页上,它提供了从入门的快速实现到每一个函数的详细解读,涵盖了从初学者到高级使用者需要了解的各个部分。即使遇到超出范围的问题,在 Google 上搜索,可以得到近 20 万个相关词条,是目前最为流行的 MQTT 客户端。
得到如此多的关注度,除了稳定的代码外,还有其易用性。Paho 的接口使用非常简单优雅,您只需要少量的代码就能实现 MQTT 的订阅及消息发布。
安装
pip3 install paho-mqtt
或者
git clone https://github.com/eclipse/paho.mqtt.python
cd paho.mqtt.python
python3 setup.py install
订阅者
import paho.mqtt.client as mqtt
# 连接的回调函数
def on_connect(client, userdata, flags, rc):
print(f"Connected with result code {rc}")
client.subscribe("$SYS/#")
# 收到消息的回调函数
def on_message(client, userdata, msg):
print(msg.topic+" "+str(msg.payload))
client = mqtt.Client()
client.on_connect = on_connect
client.on_message = on_message
client.connect("broker.emqx.io", 1883, 60)
client.loop_forever()
发布者
import paho.mqtt.client as mqtt
import time
def on_connect(client, userdata, flags, rc):
print(f"Connected with result code {rc}")
client = mqtt.Client()
client.on_connect = on_connect
client.connect("broker.emqx.io", 1883, 60)
for i in range(3):
client.publish('a/b', payload=i, qos=0, retain=False)
print(f"send {i} to a/b")
time.sleep(1)
client.loop_forever()
甚至,你可以通过一行代码,实现订阅、发布。
import paho.mqtt.subscribe as subscribe
# 当调用这个函数时,程序会堵塞在这里,直到有一条消息发送到 paho/test/simple 主题
msg = subscribe.simple("paho/test/simple", hostname="broker.emqx.io")
print<

本文对比了Python中的三个MQTT客户端库——paho-mqtt、HBMQTT和gmqtt。paho-mqtt由Eclipse基金会维护,文档丰富,支持MQTT 3.1和3.1.1,但不支持MQTT5.0。HBMQTT基于Python的asyncio库,适用于异步IO优化,但知名度较低且不支持MQTT5.0。gmqtt则支持MQTT5.0,代码风格友好,但仍在初级开发阶段。选择时,根据项目需求和对MQTT5.0的支持考虑。
最低0.47元/天 解锁文章
272

被折叠的 条评论
为什么被折叠?



