数据采集,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的细节比较多,不一 一陈述了,码字不易,给个赞呗~~
数据采集,SCADA, 使用MQTT的方式来进行消息单/双向传输,什么场景使用MQTT的更多相关文章
- MQTT的学习研究(十四) MQTT moquette 的 Callback API 消息发布订阅的实现
在moquette-mqtt中提供了回调callback模式的发布和订阅但是在订阅之后没有发现有消息接收的方法,参看moquette-mqtt中Block,Future式的发布订阅基础是callbac ...
- MQTT的学习研究(三)moquette-mqtt 的使用之mqtt服务发布主题信息
接着上一篇的moquette-mqtt 的使用之broker启动之后,我们需要启动moquette-mqtt 的服务端发布消息. 在moquette-mqtt 的mqtt-client中三种方式实现发 ...
- MQTT的学习研究(十二) MQTT moquette 的 Future API 消息发布订阅的实现
MQTT moquette 的Server发布主题 package com.etrip.mqtt.future; import java.net.URISyntaxException; import ...
- MQTT的学习研究(四)moquette-mqtt 的使用之mqtt Blocking API客户端订阅并接收主题信息
在上面两篇关于mqtt的broker的启动和mqtt的服务端发布主题信息之后,我们客户端需要订阅相关的信息并接收相关的主题信息. package com.etrip.mqtt; import java ...
- 使用GET方式提交的表单遇到的问题
经常使用表单,一直使用的都是POST方式,POST将数据封装到请求体中,相对于GET安全一点:而POST处理中文编码问题也比GET简单(GET需要将URL编码,后台接受到后还需要解码).今天我想要使用 ...
- jquery下的提交,点击按钮没反应,post方法不执行 JSON方式在FORM表单下不起作用
jquery下的提交,点击按钮没反应,post方法不执行 JSON方式在FORM表单下不起作用
- 采用MQTT协议实现android消息推送(2)MQTT服务端与客户端软件对比、android客户端示列表
1.服务端软件对比 https://github.com/mqtt/mqtt.github.io/wiki/servers 名称(点名进官网) 特性 简介 收费 支持的客户端语言 IBM MQ 完整的 ...
- 采用MQTT协议实现android消息推送(1)MQTT 协议简介
1.资料 mqtt官网 http://mqtt.org/ 服务端程序列表 https://github.com/mqtt/mqtt.github.io/wiki/servers 客户端库列表 http ...
- MQTT的学习研究(二)moquette-mqtt 的使用之mqtt broker的启动
在MQTT 官网 (http://mqtt.org/software)中有众多MQTT的实现方式.具体参看官网,Moquette是基于Apache Mina 的模型的一个Java MQTT broke ...
随机推荐
- 关于kmp算法
字符串匹配算法简称kmp 日常安利大佬博客(真的是一篇很好的文章) 觉得百度百科讲的也挺好 就是给出两个字符串a, b 求b在a中的所有位置 next数组:代表当前字符之前的字符串中,有多大长度的相同 ...
- 前端零基础入门:页面结构层HTML(2)
学习笔记 若本号内容有做得不到位的地方(比如:涉及版权或其他问题),请及时联系我们进行整改即可,会在第一时间进行处理. 请点赞!因为你们的赞同/鼓励是我写作的最大动力! 欢迎关注达达的简书! 这是一个 ...
- vue指令用法
vue指令 指令式带有 v- 前缀的特殊特性v-text和v-html都属于指令将数据和dom做关联,当表达式的值改变时,响应式地作用在视图 解决大胡子语法闪烁案例 [v-cloak] { dispa ...
- Cookie 的 SameSite 属性
转自http://www.ruanyifeng.com/blog/2019/09/cookie-samesite.html Chrome 51 开始,浏览器的 Cookie 新增加了一个SameSit ...
- [Beta阶段]第七次Scrum Meeting
Scrum Meeting博客目录 [Beta阶段]第七次Scrum Meeting 基本信息 名称 时间 地点 时长 第七次Scrum Meeting 19/05/13 大运村寝室6楼 35min ...
- java定时任务框架Quartz入门与Demo搭建
- mybatis自定义插件(拦截器)开发详解
mybatis插件(准确的说应该是around拦截器,因为接口名是interceptor,而且invocation.proceed要自己调用,配置中叫插件)功能非常强大,可以让我们无侵入式的对SQL的 ...
- 我的node-webkit笔记
话不多说,直接上码: index.html <!DOCTYPE html> <html> <head> <meta charset="utf-8&q ...
- jconsole远程连接centos7 服务器上的tomcat来查看服务器状况(无密码版)
1.修改tomcat catalina.sh 代码解释:-Dcom.sun.management.jmxremote.port=6969 //连接端口,自定义不要与已有的端口冲突-Dcom.sun. ...
- Html表格和表头文字不换行
[本文出自天外归云的博客园] 希望表头中的文字和表格中的文字不换行,只需要在th和td标签加上: nowrap="nowrap"