写在前面
好久没发公众号了,最近沉迷电子DIY,没事搞了个四足机器人玩,用的esp WiFi模块来做的通信,记录一下电子通信中学到的MQTT技术。
MQTT
MQTT(Message Queuing Telemetry Transport)是一种轻量级的消息传输协议。它跟KafKa的架构类似,都是通过发布-订阅的方式进行通信,不过Kafka是采用这种模式的消息队列(可做数据存储),而MQTT仅仅是类似TCP的传输协议。
在实际使用中有三个角色,代理服务器(Broker),订阅者(Subcriber),发布者(Publisher)。通过唯一标识topic,来进行数据传输,数据收发方不用再像TCP一样建立连接,这点表现形式上跟UDP广播又比较像。
订阅者订阅一个topic,在运行的时候,当有发布者对着这个topic发送数据,订阅者就可以收到。
MQTT相比HTTP特别轻量级,经常应用在物联网领域。
代码示例
这里我用python来演示,代理服务器Broker有很多公网免费的,topic是自己自定义的,这里我测试配置的config.py如下:
# config.py
# MQTT代理服务器的地址
broker_address = "mqtt.eclipseprojects.io"
# 自定义的topic
topic = "ssremex_test/topic"
随后,来模拟发布者和订阅者,这里用到了一个第三方库 paho
,它是一个相对稳定的专门用来实现MQTT客户端的库。
pip install paho
在这个库中,不管是发布者还是订阅者都是属于客户端Client,下面分别来实现来进行实现:
# 发布者 publisher.py
import paho.mqtt.client as client
from config import broker_address, topic
# 创建客户端实例,赋予ID P1
publisher = client.Client(client.CallbackAPIVersion.VERSION2, client_id="P1")
# 连接Broker代理
publisher.connect(broker_address)
message = "Hello MQTT"
publisher.publish(topic, message)
import paho.mqtt.client as client
from config import broker_address, topic
import time
# 连接成功回调函数
def on_connect(subscriber, userdata, flags, reason_code, properties):
print(f"Connect with result code: {reason_code}")
# 订阅topic
subscriber.subscribe(topic)
# 消息接收回调函数
def on_message(subscriber, userdata, msg):
print(f"Received message: {msg.payload.decode()}, topic: {msg.topic}")
subscriber = client.Client(client.CallbackAPIVersion.VERSION2, client_id="S1")
subscriber.on_connect = on_connect
subscriber.on_message = on_message
subscriber.connect(broker_address)
subscriber.loop_forever()
代码很简单,关键地方也注释了,就不用过多解释。
演示
MQTT本质也是实时通信技术,所以先运行订阅者,再运行发布者
收工!
原文始发于微信公众号(飞羽技术工坊):物联网通信,学学MQTT
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论