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的更多相关文章

  1. MQTT的学习研究(十四) MQTT moquette 的 Callback API 消息发布订阅的实现

    在moquette-mqtt中提供了回调callback模式的发布和订阅但是在订阅之后没有发现有消息接收的方法,参看moquette-mqtt中Block,Future式的发布订阅基础是callbac ...

  2. MQTT的学习研究(三)moquette-mqtt 的使用之mqtt服务发布主题信息

    接着上一篇的moquette-mqtt 的使用之broker启动之后,我们需要启动moquette-mqtt 的服务端发布消息. 在moquette-mqtt 的mqtt-client中三种方式实现发 ...

  3. MQTT的学习研究(十二) MQTT moquette 的 Future API 消息发布订阅的实现

    MQTT moquette 的Server发布主题 package com.etrip.mqtt.future; import java.net.URISyntaxException; import  ...

  4. MQTT的学习研究(四)moquette-mqtt 的使用之mqtt Blocking API客户端订阅并接收主题信息

    在上面两篇关于mqtt的broker的启动和mqtt的服务端发布主题信息之后,我们客户端需要订阅相关的信息并接收相关的主题信息. package com.etrip.mqtt; import java ...

  5. 使用GET方式提交的表单遇到的问题

    经常使用表单,一直使用的都是POST方式,POST将数据封装到请求体中,相对于GET安全一点:而POST处理中文编码问题也比GET简单(GET需要将URL编码,后台接受到后还需要解码).今天我想要使用 ...

  6. jquery下的提交,点击按钮没反应,post方法不执行 JSON方式在FORM表单下不起作用

    jquery下的提交,点击按钮没反应,post方法不执行 JSON方式在FORM表单下不起作用

  7. 采用MQTT协议实现android消息推送(2)MQTT服务端与客户端软件对比、android客户端示列表

    1.服务端软件对比 https://github.com/mqtt/mqtt.github.io/wiki/servers 名称(点名进官网) 特性 简介 收费 支持的客户端语言 IBM MQ 完整的 ...

  8. 采用MQTT协议实现android消息推送(1)MQTT 协议简介

    1.资料 mqtt官网 http://mqtt.org/ 服务端程序列表 https://github.com/mqtt/mqtt.github.io/wiki/servers 客户端库列表 http ...

  9. MQTT的学习研究(二)moquette-mqtt 的使用之mqtt broker的启动

    在MQTT 官网 (http://mqtt.org/software)中有众多MQTT的实现方式.具体参看官网,Moquette是基于Apache Mina 的模型的一个Java MQTT broke ...

随机推荐

  1. 请找出"aaaabbcccdddd"字符串中出现最多的字母

    function getCount(str) { for(var code=32;code<128;code++){ var mych=String.fromCharCode(code); va ...

  2. Linux执行shell脚本的方法

    Linux下有个脚本/home/start.sh,常用的两种执行方法如下: 1../start.sh.注意此时start.sh脚本文件必须有可执行权限-x.类似的有以绝对路径来执行:/home/sta ...

  3. shell 文件的包含

    使用.或者source api.sh function intadd() { let data=$+$ echo $data } test.sh #!/bin/bash . api.sh read d ...

  4. shell脚本获取传入参数的个数

    ts.sh #!/bin/bash echo $# 输出 [root@redhat6 ~]# ./ts.sh para1 [root@redhat6 ~]# ./ts.sh para1 para2 [ ...

  5. Mongoose 两个表关联查询aggregate 以及 Mongoose中获取ObjectId

    Mongoose 两个表关联查询aggregate 通常两个表关联查询的时候,是一种一对多的关系,比如订单与订单详情就是一对多的关系,一个订单下面有多个商品 数据模拟 首先我们先将数据模拟出来,先选择 ...

  6. Codeforces 828F Best Edge Weight - 随机堆 - 树差分 - Kruskal - 倍增算法

    You are given a connected weighted graph with n vertices and m edges. The graph doesn't contain loop ...

  7. DNS基本操作详解

    在很多人看来,DNS只是为外部提供DNS解析服务(我以前也是这么认为的,直到膝盖中了一箭),但作为互联网的基础设施,DNS远没有想象的那么简单.如果你没有听说过DNS查询.反向解析.zone传输.动态 ...

  8. Mysql之Incorrect string value: '\xF0\x9F\x98\x89 \xE6... 保存emoji表情

    错误信息如下: Incorrect string value: '\xF0\x9F\x98\x89 \xE6...' 问题产生的原因是字符串不兼容4字节的unicode导致的,一般我们常见的表情编码等 ...

  9. C#反射方式调用泛型方法

    using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...

  10. x264 b_annexb格式和多slice

    实际应用环境:iOS,Android x264_param_t中有下面两个参数值得注意下int i_threads;        /* encode multiple frames in paral ...