MQTT基础入门与资料收集

文章目录

  • 目的
  • 基础入门
  • MQTT相关软件
    • MQTT客户端软件
    • MQTT Broker(服务器)软件
  • MQTT编程
  • 总结

目的

最近项目中涉及到MQTT相关内容,在此对相关内容做个基础的梳理。

基础入门

MQTT官网: https://mqtt.org/

MQTT基础入门与资料收集_第1张图片

MQTT是用于物联网(IoT)的OASIS标准消息传递协议。它被设计为一种非常轻量级的发布/订阅消息传输,非常适合连接代码占用空间小、网络带宽最小的远程设备。MQTT目前广泛应用于汽车、制造、电信、石油和天然气等行业。

MQTT是一种 发布/订阅 机制的通讯架构:
MQTT基础入门与资料收集_第2张图片
MQTT的服务器(Broker)和常见的HTTP服务器这些区别蛮大的。常见的HTTP服务器是有具体的业务逻辑功能的,所以服务器需要自行编写代码;而MQTT服务器只负责客户端接入和消息分发等工作,这些工作都是由MQTT协议标准规定好的,并不包含具体应用中的业务逻辑。MQTT客户端即可以是消息的发布者也可以是消息的接收者,所以真正的业务逻辑只和客户端有关。

MQTT中的消息都有各自的topic,客户端发布消息时要声明消息的topic,客户端作为消息接收者的话需要订阅topic。服务器在收到消息时会将其推送给已经订阅了的客户端。目前大多数情况下服务器不用手动建立topic,而是会在收到未被使用过的topic的消息时自动记录。

MQTT中有个QoS机制来控制消息传递的质量:QoS0 - 最多交付一次;QoS1 - 至少交付一次;QoS2 - 只交付一次。发布和订阅时都有QoS参数,如果发布方的QoS比较小则以发布方的Qos为准。

MQTT除了上面的一些机制,最终还是为用来传递消息的,其消息格式最少需要有两个字节的头部消息:
在这里插入图片描述
第一个字节用于表达消息类型以及一些标识符;第二个字节用于表达接下来数据的长度。长度字段的 最高Bit为1 用来表示还需要再一个字节来表达长度,依此类推,最多可以用四个字节来表达消息长度,最大可以表示的长度为 256MB - 1Byte:
MQTT基础入门与资料收集_第3张图片

MQTT目前流行的 3.1.15.0 两个协议标准,协议是向下兼容的。另外还有 MQTT-SN 标准,设计上主要用于性能受限的一些设备中,协议格式上和前两者有一些区别。

MQTT比较简单,网上教程也非常多,比如下面链接就对相关的各种内容都介绍的比较详尽:
《MQTT 最全教程:从入门到精通 | EMQ》https://www.emqx.com/zh/mqtt-guide

MQTT相关软件

MQTT在实际使用时往往是嵌入在应用程序代码中来使用的,不过很多时候也需要一些软件进行通讯测试使用,下面列出一些比较常用的软件。

MQTT客户端软件

MQTTX
主页:https://mqttx.app/zh
项目地址:https://github.com/emqx/MQTTX
Web客户端:https://mqttx.app/zh/web
命令行工具:https://mqttx.app/zh/cli

MQTT Explorer
主页:https://mqtt-explorer.com/
项目地址:https://github.com/thomasnordquist/MQTT-Explorer

MQTT Broker(服务器)软件

MQTT因为服务器并不涉及具体的业务逻辑,所有很多情况下并不需要手动搭建服务器,很多云服务提供商都有提供MQTT服务,如果要测试使用的话通常使用免费的服务就够用了。当然也有一些本地的MQTT服务器软件可以用。

EMQX
主页:https://www.emqx.io/zh
项目地址:https://github.com/emqx/emqx

下载后解压得到程序,使用下面方式运行程序:

# 启动
.\bin\emqx start
# 查询运行状态
.\bin\emqx ctl status
# 停止
.\bin\emqx stop

MQTT基础入门与资料收集_第4张图片

EMQX启动后可以从浏览器打开管理面板 http://localhost:18083/ ,默认用户名 admin 和默认密码 public
MQTT基础入门与资料收集_第5张图片

Eclipse Mosquitto
主页:https://mosquitto.org/
项目地址:https://github.com/eclipse/mosquitto

NanoMQ
主页:https://nanomq.io/
项目地址:https://github.com/emqx/nanomq

VerneMQ
主页:https://vernemq.com/
项目地址:https://github.com/vernemq/vernemq

MQTT编程

大多数时候在应用程序中使用MQTT都是作为客户端来使用的,作为客户端使用最出名的项目就是 Eclipse Paho 了:
https://eclipse.dev/paho/
MQTT基础入门与资料收集_第6张图片
可以看到支持非常多的语言。

上面项目中对于JavaScript的支持仅限于Websocket通讯,而目前JS不光用在前端中,在后端也很流行,这时候可以使用下面的库在作为全功能的MQTT客户端使用:
https://github.com/mqttjs/MQTT.js

另外如果有作为服务器使用的需求的话我个人觉得使用Golang比较不错,下面是几个流行的库:
https://github.com/mochi-mqtt/server
https://github.com/DrmagicE/gmqtt
https://github.com/fhmq/hmq

总结

MQTT比较简单,基本上有个服务器,找个客户端软件测试下消息收发就可以开始使用了。

你可能感兴趣的:(其它内容,嵌入式,MQTT,物联网,服务器,客户端)