数据采集,SCADA, 使用MQTT的方式来进行消息单/双向传输,什么场景使用MQTT
1.先来了解下:
看完得出关键字:发布、订阅模式,事件驱动,主题,生产与消费解耦
2.轻量级
普通的socket连接对服务器的消耗太大了,socket服务端是很消耗资源的,一台服务器能链接的客户端是有限的, 所以才会出现像MQTT这种轻量级低消耗的协议来维护长连接.
除了Socket重量级外,重点是socket数据的生产与消费没有解耦,如果设备是服务端,上位机必须是客户端,MQTT它的绝对是比你写代码实现的socket稳定好用,
很多人写出来的socket代码都经受不住考验,网上一堆垃圾代码,(所有也产生了一优秀开源的socket框架 supersocket ,Fastsocket,但它们并不适用于物联网,为什么不适用又是另一个话题了)
MQTT,目前来说是比较好的一种方式,可以很方便的实现,设备与设备之间,设备与应用程序的消息通讯与解耦。
3.MQTT【只是一个协议】,基于这种协议,实现了服务端中央代码(如国内的EMQ,国外也有这种软件),客户端链接的各种API
协议的规范就是TCP的报文内容,说白了就是定义了一串字符串,发送什么内容,就做什么事件(大概意思)。MQTT协议还是要去了解下的,才方便理解内部是怎么运作的。
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的细节比较多,不一 一陈述了,码字不易,给个赞呗~~
-------------------------------------------------------------------------------------------------------------------------
1.数据采集交流群 ,关注CNC,PLC,机器人采集与控制。
2.CNC关注Fanuc 三菱 华数 广数 MAZAK 海德汉 haas哈斯 大隈OKUMA。目前群里有上传了一些CNC采集的基础入门资料,组群主要是方便大家交流学习
3.PLC关注三菱 西门子 欧姆龙 基恩士 松下 倍福 汇川 罗克韦尔 富士 Melsel。
4.通信类关注MQTT,EMQ,消息队列或缓存关注Redis RabbitMQ Memcached。
5.技术类关注ASP.NET MVC WebApi Winform WPF Socket/串口通信。
6.系统类关注MES,SCADA,APP,微信小程序等管理类软件开发。
7.方向关注『工业互联网项目』『数字化工厂』数字化车间转型与工业互联网改造升级。
8.建群主要是相互学习交流,交个朋友,多个朋友多条路,过滤僵尸粉,有兴趣的朋友加入。
9.文章主要是平时工作一些记录总结,好记性不如烂笔头,希望能坚持一周一篇。
10.采集有风险,搞机需谨慎,有兴趣的付费加入群,付款备注你的微信号
11.关注公众号,随时查看最新文章。