笔者相信大家对HTTP一定不能陌生。"HTTP协议的三次握手四次挥手"相信也略有耳闻。HTTP协议的优势相信大家都明白。不然他不会这流行。然而这并不能忽略他的缺点。最大的特点就是无状态。有没有人做过推送的业务。这个时候用HTTP协议显然是多么SB的事情。笔者有见过一款手机APP。他即然是在客户端那边开起一个后台线程然后每一段时间去请求一下服务器,来更新客户端的信息。不是说不行,可是你们不觉得这样做太伤了吗?HTTP协议是请求/响应的模式进行的。当然这样子很简单,但优缺点也很明显。也许可能这就是出现很多通信协议——XMAP协议、MQTT协议、CoAP协议等。最近笔者因为公司任务不得不去了解一下MQTT协议。所以才会有了这一系列的出现。

如果读者们在百娘上面查找MQTT的话,就会出现很多关于MQTT的介绍。下面是笔者常用的几个网站。

中文MQTT站点:https://www.gitbook.com/book/mcxiaoke/mqtt-cn/details

英文MQTT站点:http://public.dhe.ibm.com/software/dw/webservices/ws-mqtt/mqtt-v3r1.html#connect

博客MQTT站点:http://www.steves-internet-guide.com/mqtt/

在这里笔者建议还是要去看英文的。中文的有一些解释看起来蛋疼。当然也有一些中文的博客介绍的也不错。

在很多的资料中介绍MQTT协议用于低端的产品比较适合。所以常常会看到他与物联网一起出现。他是以发布/订阅的模式进行的。如图下

从图上我们可以对MQTT有一个大概的了解。原来MQTT有要三种角色的存在。

Broker代理:很多人理解为中间件,当然可以这样子认为。他就是一个中间件。用于处理信息并发送到相应的订阅者。

发布者:用于发布信息到代理上面。注意:发布者也可以是订阅者。

订阅者:就是用于接受信息的客户端。

事实上,在他们通信之间,还需要用一叫“主题”的概念。主题就是用于订阅者需要什么信息。或是理解为订阅者对哪种信息感兴,然后就订阅对应的主题,这样子订阅者就能够接受到相应的主题信息。这样子相信大家对MQTT就了一个很深的概念了。

MQTT协议和HTTP协议一样子都是基于TCP/IP网络协议上来进行的。同时在消息的传输上又做了三种模式的规定——分别为:最多一次、至少一次、只有一次。即然是通信,那么通信包的设计是少不了的。通信包是以二进字流进行的。

我们都知道HTTP协议里面一个请求就是有一个对应的响应回来。而MQTT也可以这样子讲,只是这里要换另一种说法——一个请求就要一个确定。这一点可以从他相关的命令就可以看出。如图下。

我们可以看到连接(CONNECT),有一个连接确定(CONNACK)。发布(PUBLISH),有一个发布确定(PUBACK).只有最后的关闭(DISCONNECT)没有对应的确定。这个在协议里面已经说明了。当客户端发来一个关闭的请求的时候,服务端不必要回应一个确定给客户端。读者一定以为PINGGREQ也没有。不要误会!PINGRESP事实上也是一种确定。PINGGREQ用于确定客户端是不是还连接着。(注:ACK是Acknowledgement的缩写)

MQTT从宏观上来看的话,可以分为客户端和服务器。笔者在学习的过程试过几个。也试着去查看他的源码。只是可惜笔者只是对C#、JAVA比较在行。其他开发语言就不行了。所以笔者这里只介绍自己看过并了解过的服务器。至于客户端的话,你们可以随便找很多。

mosquitto:是用C/C++开发语言编写的。据说是目前最流行的MQTT代理。(https://mosquitto.org/)

ActiveMQ:不好意思。这个不是专门为MQTT协议而写的。是多个协议的。所以笔者不是很喜欢。同时有人说他是纯JAVA编写的。不要被骗了里面还是有SCALA语言的。(http://activemq.apache.org/)

Apollo:这是ActiveMQ的子项目。听说目前停止维护。笔者略看了一下代码。不好意思。又不是纯JAVA大部分是SCALA。(http://activemq.apache.org/apollo/index.html)

HiveMQ:是商业的MQTT。为什么笔者要提他呢?主要他有很多可以参考的意义。(https://www.hivemq.com/mqtt/)

想要了解更多的信息可以去网站(https://github.com/mqtt/mqtt.github.io/wiki/servers)里面相关MQTT客户端和服务端的开源介绍和说明。

学习MQTT最好的方式就是代一个开源的项目。不管是客户端还是代理端的都要。然后一边查看源码一边查看官方的协议文档。当然也有一些工具可以帮你略去写客户端的代码。如MQTTLens就是笔者常的。他是一个GOOGLE插件。

MQTT——入门介绍的更多相关文章

  1. (转)MQTT 入门介绍

    原文链接:https://blog.csdn.net/qq_2887... MQTT 入门介绍 一.简述 MQTT(Message Queuing Telemetry Transport,消息队列遥测 ...

  2. MQTT 入门介绍——菜鸟教程

    一.简述 MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议),是一种基于发布/订阅(publish/subscribe)模式的"轻量级& ...

  3. MQTT入门介绍

    一简述 MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议),是一种基于发布/订阅(publish/subscribe)模式的"轻量级&q ...

  4. MQTT 入门介绍

    一.简述 MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议),是一种基于发布/订阅(publish/subscribe)模式的"轻量级& ...

  5. C# BackgroundWorker组件学习入门介绍

    C# BackgroundWorker组件学习入门介绍 一个程序中需要进行大量的运算,并且需要在运算过程中支持用户一定的交互,为了获得更好的用户体验,使用BackgroundWorker来完成这一功能 ...

  6. 初识Hadoop入门介绍

    初识hadoop入门介绍 Hadoop一直是我想学习的技术,正巧最近项目组要做电子商城,我就开始研究Hadoop,虽然最后鉴定Hadoop不适用我们的项目,但是我会继续研究下去,技多不压身. < ...

  7. [Python爬虫] 在Windows下安装PhantomJS和CasperJS及入门介绍(上)

    最近在使用Python爬取网页内容时,总是遇到JS临时加载.动态获取网页信息的困难.例如爬取CSDN下载资源评论.搜狐图片中的“原图”等,此时尝试学习Phantomjs和CasperJS来解决这个问题 ...

  8. [Python爬虫] scrapy爬虫系列 &lt;一&gt;.安装及入门介绍

    前面介绍了很多Selenium基于自动测试的Python爬虫程序,主要利用它的xpath语句,通过分析网页DOM树结构进行爬取内容,同时可以结合Phantomjs模拟浏览器进行鼠标或键盘操作.但是,更 ...

  9. JavaScript入门介绍(二)

    JavaScript入门介绍 [函数] 函数function 是Javascript的基础模块单元,用于代码的复用.信息影藏和组合调用. function a(){} 函数对象Function Lit ...

随机推荐

  1. cookie 二:

    本篇随笔从cookie的入门开始,介绍了cookie的设置获取和移除,还有一些小的应用案例:一.设置cookie <script> //设置cookie:function setCooki ...

  2. 在纯HTML的静态网页中添加一段统计网页访问量的JAVA Script代码?

    如何在网站上进行流量统计呢,可以找第三方服务网站去注册,但也可以在网站上直接添加代码,只需将以下代码copy到你的网页中,复制到</body>之前就可以啦!是不是很简单啊! <scr ...

  3. ThinkPHP第七天(F函数使用,项目分组配置,项目分组模板文件放置规则配置)

    1.F(文件名称,写入数据,写入地址),用于将数据写入至磁盘文件中,如F('Data',$arr,'./Data/'),作用是将$arr写入至网站根目录的Data文件夹中的Data.php中. 2.读 ...

  4. last期末作业

    功能:每人完成一个新闻发布系统,包括系统的前台访问和后台管理. 要求: 1.使用ASP.NET MVC4开发. 2.在完成基本功能后,可以利用本学期所学的知识进行扩展. 3.完成日期为2013年12月 ...

  5. 电脑获取手机文件的一种方式(通过手机建立ftp)

    1 打开手机热点. 2 手机需要安装es文件浏览器,在es浏览器首页有个远程管理(或在左侧网络功能下有个远程管理),打开即可启用手机目录下的ftp. 3 打开电脑按提示输入ftp站点.默认地址是手机热 ...

  6. Git 简单入门(二)

    分支管理 分支的作用 提交不完整的代码到主分支上会导致别人不能正常开发 如果等代码全部写完再提交,存在丢失每天进度的风险 详见:https://segmentfault.com/q/101000001 ...

  7. web测试注意点

    关于网页测试我们需要注意的地方有: 1.每次测试之前都需要代码更新.清理缓存,测试数据使用新数据. 2.各模块的信息归类是否正确.比如进入一级栏目或二级栏目的列表页,查看左侧栏目名称,右侧文章标题及内 ...

  8. Codeforces976E Well played! 【贪心】

    题目分析: 由于乘二的收获很大,所以我们可以证明乘的数一定是同一个,接着排序后依次选取,判断一下即可. 题目代码: #include<bits/stdc++.h> using namesp ...

  9. 手机开发-IOS

    IOS 语言.Object-C,苹果公司收购的语言,专用于IOS开发,是C语言的超集,面向对象的. 开发环境.一是XCode,是苹果的IDE,提供了控件.二是Instruments,测试性能用,收集显 ...

  10. TF-IDF原理

    什么是TF-IDF TF-IDF(Term Frequency-Inverse Document Frequency, 词频-逆文件频率).  是一种用于资讯检索与资讯探勘的常用加权技术.TF-IDF ...