这是我参与8月更文挑战的第1天,活动详情查看:8月更文挑战
一、简述
MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议),是一种基于发布/订阅(publish/subscribe)模式的“轻量级”通讯协议,该协议构建于TCP/IP协议上,由IBM在1999年发布。MQTT最大优点在于,可以以极少的代码和有限的带宽,为连接远程设备提供实时可靠的消息服务。作为一种低开销、低带宽占用的即时通讯协议,使其在物联网、小型设备、移动应用等方面有较广泛的应用。
MQTT是一个基于客户端-服务器的消息发布/订阅传输协议。MQTT协议是轻量、简单、开放和易于实现的,这些特点使它适用范围非常广泛。在很多情况下,包括受限的环境中,如:机器与机器(M2M)通信和物联网(IoT)。其在,通过卫星链路通信传感器、偶尔拨号的医疗设备、智能家居、及一些小型化设备中已广泛使用。
二、MQTT和MQ的区别是什么之kafka和mqtt的区别是什么?
两者虽然都是从传统的Pub/Sub消息系统演化出来的,但是进化的方向不一样,以下是几个比较突出的点:
- Kafka是为了数据集成的场景,与以往Pub/Sub消息总线不一样,通过分布式架构提供了海量消息处理、高容错的方式存储海量数据流、保证数据流的顺序等特性。
- MQTT是为了物联网场景而优化,不但提供多个QoS选项(exact once、at least once、at most once),而且还有层级主题、遗嘱等等特性。
三、安装
推荐EMQX
选择版本和对应的机器就会有不同的安装方式,选择自己喜欢的安装方式进行安装并启动。
启动服务器后,浏览器打开http://127.0.0.1:18083,使用默认管理账号admin/public即可登录查看,在设置里还能改成中文界面,很方便。
四、简单demo
安装mqtt模块
pip install paho-mqtt
写一个接受客户端
mqtt_sub.py
import paho.mqtt.client as mqtt
def my_on_connect(client, userdata, flags, rc):
print('client:{}, userdata:{}, flags:{}'.format(client, userdata, flags))
print("Connected with result code: " + str(rc))
def my_on_message(client, userdata, msg):
print('client:{}, userdata:{}'.format(client, userdata))
print(msg.topic + " " + str(msg.payload))
client = mqtt.Client()
client.on_connect = my_on_connect
client.on_message = my_on_message
client.connect('127.0.0.1', 1883, 600)
client.subscribe('fifa', qos=0)
client.loop_forever()
写一个发布客户端
mqtt_pub.py
import paho.mqtt.client as mqtt
def my_on_connect(client, userdata, flags, rc):
print('client:{}, userdata:{}, flags:{}'.format(client, userdata, flags))
print("Connected with result code: " + str(rc))
def my_on_message(client, userdata, msg):
print('client:{}, userdata:{}'.format(client, userdata))
print(msg.topic + " " + str(msg.payload))
client = mqtt.Client()
client.on_connect = my_on_connect
client.on_message = my_on_message
client.connect('127.0.0.1', 1883, 600)
client.publish('fifa', payload='amazing', qos=0)
首先执行mqtt_sub.py文件,
然后执行mqtt_pub.py
问题1:本地没有安装mqtt服务器报错或者前往本地搭建mqtt服务器搭建本地mqtt服务器
可以将client.connect('127.0.0.1', 1883, 600)
修改为client.connect("mqtt.eclipse.org", 1883, 60)