本帖最后由 Erik.Xue 于 2023-9-28 11:44 编辑
随着物联网技术的爆发式发展,有点当初互联网起飞的盛况,越来越多的设备和网络连接在一起,形成一张庞大无比的物联网生态系统。在这个系统中,通信协议扮演者至关重要的角色。海量的设备接入和设备管理对网络带宽、时延要求、通信协议以及平台服务架构都带来了巨大的挑战和机遇。对于物联网协议来说,解决了这些关键问题就解决了挑战。
那么说了这么多,这个和活字格有什么样的关系呢?为了解释清楚,我们先要了解一下什么是MQTT协议。
TCP MQTT连接
标椎的MQTT是基于TCP/IP协议栈构建的异步通信消息协议,是一种轻量级的发布、订阅消息传输协议。可以在不可靠的网络环境中进行扩展,适用于设备硬件存储空间或网络带宽有限的场景。
WebSocket协议是基于TCP的一种新的网络协议,浏览器和服务器只需要完成一次握手,两者之间就直接可以创建持久性的连接,并进行双向数据传输,客户端和服务器之间的数据交换变得更加简单。这里 WebSocket 更准确的是指先使用 WebSocket 建立连接,然后在 WebSocket 通道上使用 MQTT 协议进行通信,即 MQTT over WebSocket。主要是用于浏览器环境的连接。标准的 MQTT 和 WebSocket 都是不加密的。会有一定的安全风险。
所以,在 MQTT 或 WebSocket 协议通信的基础上,添加 TLS/SSL 加密,确保通信的安全,不易被**和篡改。MQTT TLS/SSL 端口号为 8883,对应 mqtts 协议; WebSocket TLS/SSL 端口号为 8084,对应 wss 协议。这里就不过多赘述MQTT协议加密相关的内容,有兴趣的小伙伴可以自行搜索查阅相关资料。
为了能直观的了解下MQTT协议,我们就和HTTP协议做一个对比吧,因为毕竟在活字格里HTTP协议是大家熟知的“常客”了,像我们的《发送HTTP请求命令》插件、
服务端命令等等,用到的都是HTTP协议,而在B/S架构中,HTTP协议也是必不可少的。
那么MQTT协议和HTTP协议有什么样的区别呢,我们接下来看一张对比表格。
Parameter | MQTT | HTTP | 缩写全称 | Message Queuing Telemetry Transport | Hyper Text Transfer Protocol | 架构 | 工作方式基于【发布/订阅】模式 | 工作方式基于【请求/相应】模式 | 复杂度 | less complexity | more complex | 协议设计 | 该协议是以数据中心而设计 | 该协议是以文档中心而设计 | 消息大小 | 消息采用二进制形式因而较小 | 消息大多使用ASCII格式 | 头部大小 | 2 Bytes | 8 Bytes | 端口号 | 1883 / 8883 etc. | 80 / 8080 etc. | 数据安全 | 协议提供SLL/TLS安全协议 | 本身没有安全协议,只有通过HTTPs协议 | 消息交互 | 可以实时推送消息 | 需要通过轮训获取数据更新 | 状态 | 有状态 | 无状态 | 连接恢复 | 可从连接异常断开中恢复 | 无法实现恢复 | 编码 | 无须编码/解码 | 基于文本数据传输,需要Base64编码/解码 |
以上就是针对MQTT协议的介绍和对比,总结来说,MQTT协议就是WebSocket协议的特别版,同样会保持长链接,那么接下来就是为大家介绍下在活字格中MQTT协议是如何应用的。‘
MQTT客户端
看下图:
上图就是MQTT在活字格中的应用,在活字格中,MQTT负责的是客户端侧的工作和任务,通过订阅单个和多个MQTT服务器的主题,就可以接收到MQTT服务器所推送的数据了。
当然上图只是简单的架构图,在复杂的生产环境中,MQTT前侧还会有很多工业采集硬件、边缘服务器等对实时、大量的数据进行预处理,而后交给MQTT服务器,MQTT服务器才会将订阅了主题的内容发送给对应的MQTT客户端。
最简单的应用场景这里举一个例子:
在大棚养殖中,需要实时监控大棚内的温度,如果温度过高或过低都会导致农作物生长异常甚至死亡,那么为了能实时监控温度变化并能提供温度超标预警的功能,我们就可以在大棚中不同位置安装多个温度传感器硬件设备,硬件数据的收集一般会通过Modbus协议进行传输,这个不是这节的重点不做赘述。
硬件数据会实时发送给相应的边缘服务器进行数据预处理,比如温度只要不超过20度,那么边缘服务器会忽略这一条数据信息。当某时温度超过了30度,边缘服务器会立刻将次温度信息给到MQTT服务器,MQTT服务器会立刻将对应的温度信息推送给订阅了MQTT主题的客户端,MQTT客户端收到相应的信息后,进行处理并给出告警通知或操作。
以上就是一个简单的MQTT客户端应用场景。
活字格中的实现
那么,为了让活字格可以充当一个MQTT客户端的角色,该怎么去做呢?为了解决此问题,可以使用插件《MQTT客户端》插件:
Mqtt客户端 - 葡萄城市场 (grapecity.com.cn)
该插件可以设置订阅相应MQTT服务端,可以同时订阅单个或多个主题,并且也可以根据自己的需求断开链接,那么接下来就为大家演示下对应的效果。
为了演示和测试,我这边选择了一个开源的MQTT服务端——mosquitto,感兴趣的小伙伴可以自行了解下。
1、启动MQTT服务端(mosquitto)
如上图,我在某个服务器上启动了MQTT服务端。
2、订阅主题
下载打开这个工程文件——
MqttDemo.fgcc
(1.63 MB, 下载次数: 1023)
|