数据采集,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 ...
随机推荐
- Django 基础篇(一)
创建虚拟环境 创建:mkvirtualenv [虚拟环境名称] 删除:rmvirtualenv [虚拟环境名称] 进入:workon [虚拟环境名称] 退出:deactivate 所有的虚拟环境,都位 ...
- 【数论】[素数筛,phi]P3601签到题
题目描述 给出l,r,要求求出\(\sum_{i = l}^r (i - phi[i]) mod 666623333\) \(1\leq l\leq r\leq 10^{12}\),\(r - l \ ...
- GET /static/css/bootstrap.min.css.map HTTP/1.1" 404
解决办法:删除bootstrap.min.css文件内容最后一行/*…………*/内容即可
- 歪国人整理的 2019 年 Java 开发路线图,值得参考!
许多Java开发人员都希望通过某种Java成长路线图,来解答有关:该学习哪些技术,使用哪些工具以及框架之类的问题. 在此,我将向大家展示一张根据自己多年经验总结出的路线图.该路线图在保持简单可行的 ...
- 【转】gdb typeid 详解
在揭开typeid神秘面纱之前,我们先来了解一下RTTI(Run-Time Type Identification,运行时类型识别),它使程序能够获取由基指针或引用所指向的对象的实际派生类型, ...
- Optional int parameter 'resourceState' is present but cannot be translated into a null value
错误日志: java.lang.IllegalStateException: Optional int parameter 'resourceState' is present but cannot ...
- Note for Reidentification by Relative Distance Comparison
link Reidentification by Relative Distance Comparison Challenge: large visual appearance changes cau ...
- tomcat中文乱码
1. https://blog.csdn.net/qq_35038153/article/details/78430359 2. 1.修改apache-tomcat-9.0.14-windows-x6 ...
- Meson version is 0.44.1 but project requires >=0.45.
/******************************************************************************* * Meson version is ...
- OpenGL的核心模式与立即渲染模式
早期的OpenGL使用立即渲染模式(Immediate mode,也就是固定渲染管线),这个模式下绘制图形很方便.OpenGL的大多数功能都被库隐藏起来,开发者很少能控制OpenGL如何进行计算的自由 ...