什么是 MQTT
- 具有”小代码占用空间和线上占用空间”的消息协议。
- MQTT 是基于发布订阅的消息传递协议。
- 在 TCP/IP 之上。
- 需要代理(例如蚊子、蜂巢、Azure IO 集线器)。
- ISO 标准(ISO/IEC PRF 20922)。
- 用于:不可靠、高延迟、低带宽的消息总线
- 具有普通字节数组的有效负载。
MQTT PUB/SUB
- 该协议使用发布/订阅体系结构,而 HTTP 及其请求/响应范例。
- 发布/订阅由事件驱动,使消息能够推送到客户端。
- 中央通信点是MQTT代理,它负责调度所有消息之间的发送者和合法的接收者。
- 向代理发布消息的每个客户端都会在邮件中包含一个主题。主题是代理的路由信息。
- 每个要接收消息的客户端都订阅特定主题,并且代理将带有匹配主题的所有消息传递到客户端。
- 因此,客户端不必互相了解,他们只通过主题进行沟通。
- 此体系结构支持高度可缩放的解决方案,无需数据生产者和数据使用者之间的依赖关系。
…REST 是什么?
- HTTP/REST 可用于处理文档和资源。
- MQTT 可用于处理消息。
- HTTP/REST 可能很复杂,并不总是简单消息的最佳解决方案。
- MQTT 数据包大小为 2 字节 + 有效负载。
- MQTT 支持 1 到 1、1 对多和多对多的消息。
- 请求和响应与发布者和订阅者。
建筑
HTTP 的区别是客户端不必提取所需的信息,但代理将信息推送到客户端,以防出现新信息。
因此,每个 MQTT 客户端都有一个永久打开的 TCP 连接到代理。如果此连接因任何情况而中断,MQTT 代理可以缓冲所有消息,并在消息重新联机时将其发送到客户端。
如前所述,MQTT 中发送消息的中心概念是主题。主题是一个简单的字符串,可以有更多的层次结构级别,这些层次结构级别由斜杠分隔。
发送客厅温度数据的样本主题可以是房子/客厅/温度。
一方面,客户端可以订阅确切的主题,另一方面可以使用通配符。订阅房屋/+/温度将导致所有消息发送到前面提到的主题房子/客厅/温度,以及任何具有任意价值的主题在客厅的地方,例如,房子/厨房/温度
加号是单个级别的通配符,只允许对一个层次结构的任意值它允许订阅到所有基础层次结构级别。例如,house/#订阅从房子开始的所有主题。
负载
- MQTT 与有效负载无关
- 简单的字节数组
- 一个简单的字符串
- 或 JSON
发布到家庭/客厅/灯光/1 消息
安全
- SSL/TLS 支持
- 用户名/密码
- 加密有效负载(数据/有效负载不可知)
- 不可低估 IoT 安全性!
- SSL/TLS 是必备的
经纪人和客户
- 莫斯基托
- 希芬MQ
- Azure IoT 中心
- MQTT.fx
- Eclipse 帕霍
- MQTTnet
代码示例
我必须构建一个示例 .NET Core 控制台应用程序来测试库。以下是代码屏幕截图,这些屏幕截图不言自明,如果需要,可以从 git 下载代码。
该解决方案包含三个项目,如下所示,所有项目都引用 MQTTnet。
代理
发布服务器和订阅服务器都连接到代理。
出版商
下面是模拟发布方法的代码:
用户
执行
以下是运行解决方案的屏幕截图。
总结
这是 MQTT 及其用法的一个非常基本的介绍。为了保持讨论简单,我把代码保持在极小。发布者/订阅服务器模式非常强大,使我们能够轻松创建分离应用程序,并且使用 MQTTNet 库,使得在我们的应用程序中实现此模式变得非常容易。您可以在下面的源代码链接上从我的 git 存储库下载示例直到下一次,快乐编码。
Git 存储库链接
>>git 克隆https://github.com/jawadhasan/mqttBasic.git