数据采集,SCADA, 使用MQTT的方式来进行消息单/双向传输,什么场景使用MQTT

 

1.先来了解下:html

    看完得出关键字:发布、订阅模式,事件驱动,主题,生产与消费解耦git

2.轻量级web

普通的socket链接对服务器的消耗太大了,socket服务端是很消耗资源的,一台服务器能连接的客户端是有限的, 因此才会出现像MQTT这种轻量级低消耗的协议来维护长链接.数据库

除了Socket重量级外,重点是socket数据的生产与消费没有解耦,若是设备是服务端,上位机必须是客户端,MQTT它的绝对是比你写代码实现的socket稳定好用,安全

不少人写出来的socket代码都经受不住考验,网上一堆垃圾代码,(全部也产生了一优秀开源的socket框架 supersocket ,Fastsocket,但它们并不适用于物联网,为何不适用又是另外一个话题了)服务器

MQTT,目前来讲是比较好的一种方式,能够很方便的实现,设备与设备之间,设备与应用程序的消息通信与解耦。并发

 

3.MQTT【只是一个协议】,基于这种协议,实现了服务端中央代码(如国内的EMQ,国外也有这种软件),客户端连接的各类API框架

协议的规范就是TCP的报文内容,说白了就是定义了一串字符串,发送什么内容,就作什么事件(大概意思)。MQTT协议仍是要去了解下的,才方便理解内部是怎么运做的。socket

MQtt【协议】中文文档
https://mcxiaoke.gitbooks.io/mqtt-cn/content/mqtt/0309-SUBACK.html高并发

4.MQTT是发布订阅模式,全部的消息都丢到MQTT代理来中转,根据主题来匹配你来接收的内容,这样就能实现数据的单向、双向传输

5.一对多的消息通信传递

6.多对一的消息传递

 

7.双向通信

8.个人使用场景,数据采集当数量有几百台以上时,采集到的数据,直接怼到数据库中时,对数据库的性能仍是有影响的

(有人说服务器能接受几百个连接啊~~),连接是能连接几百个,但若是高并发的条件下,对采集的表进行高并发操做的话(同时采集,同时怼相关的几个表),是很容易形成死锁或者等待的。

WEB端再去拿这些数据来展示作报表时,性能直线降低,页面滚动等候很久。

解决办法能够用MQTT当作Socket服务端来用,把采集到的数据所有丢上MQTT服务器,再写一个客户端程序去消费这些消息,消费MQTT代理服务器上的消息就是按消息队列的方式来消费的,先进先出

用这个方式后,工控机采集的CPU使用率降低一半,web端页面陈显也顺畅不少,后续这个瞬时数据可优化成,直接从MQTT中读取,性能会更快。

 

9.一些设备的瞬间数据,包括web,手机端,上位机,能够直接从MQTT代理服务器上读取,不走数据库。性能确定是最好的

10.安全问题,数据消费端并不须要去了解设备的IP,端口之类的,它只跟MQTT代理服务器联系。

11.总结:不种的场景,使用不用的技术,MQTT的细节比较多,不一 一陈述了,码字不易,给个赞呗~~

相关文章
相关标签/搜索