笔者相信大家对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爬虫系列 <一>.安装及入门介绍

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

  9. JavaScript入门介绍(二)

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

随机推荐

  1. 201521123077 《Java程序设计》第5周学习总结

    1. 本周学习总结 1.1 尝试使用思维导图总结有关多态与接口的知识点. 举个小栗子: 右侧的四个类都实现了同一个接口,所以可以让游戏类的引用指向实现类的实例,根据不同类型的实现类可以表现出不同的特性 ...

  2. 学号:201521123116 《java程序设计》第五周学习总结

    1. 本章学习总结 2. 书面作业 1.代码阅读:Child压缩包内源代码 1.1 com.parent包中Child.java文件能否编译通过?哪句会出现错误?试改正该错误.并分析输出结果. 不能编 ...

  3. Python-老男孩-01_基础_文件IO_函数_yield_三元_常用内置函数_反射_random_md5_序列化_正则表达式_time

    Python2.7 缩进统一: 约定  常量 大写 , 变量  小写 判断一个变量在内存中的地址,也能看出是不是一个值 id()函数 >>> x = 'abc' >>&g ...

  4. 手把手教你使用spring cloud+dotnet core搭建微服务架构:服务治理(-)

    背景 公司去年开始使用dotnet core开发项目.公司的总体架构采用的是微服务,那时候由于对微服务的理解并不是太深,加上各种组件的不成熟,只是把项目的各个功能通过业务层面拆分,然后通过nginx代 ...

  5. <c:forEach>+<c:if>

    <c:forEach>:用来做循环<c:if>:相当于if语句用于判断执行,如果表达式的值为 true 则执行其主体内容. <c:forEach var="每个 ...

  6. Opengl4.5 中文手册—G

    索引 A      B    C      D     E     F     G H      I     J      K     L     M     N O      P    Q      ...

  7. [SDOI2009]HH的项链解题报告

    原题目:洛谷P1972 题目描述 HH 有一串由各种漂亮的贝壳组成的项链.HH 相信不同的贝壳会带来好运,所以每次散步完后,他都会随意取出一段贝壳,思考它们所表达的含义.HH 不断地收集新的贝壳,因此 ...

  8. 使用phpmailer插件发邮件失败提示:SMTP -> ERROR: Failed to connect to server: Connection timed out (110) smtp connect() failed;

    一个邮件发送问题,整整弄了我一周时间,起因是这样的,之前弄的一个网站,需要在邮箱里面认证之后才可以注册成功.网站上线了差不多一年之后,客户突然跟我说,网站不能注册了,然后我就查看了一下代码. 发现报这 ...

  9. Qt全局宏和变量

    1.  Qt 全局宏定义 Qt版本号: QT_VERSION :  (major << 16) + (minor << 8) + patch 检测版本号: QT_VERSION ...

  10. PLSQL Developer 连接oracle(64)(instantclient_32)

    下载instantclient-basic-nt-11.2.0.2.0位客户端,加压后存放,如F:\instantclient_11_2 拷贝Oracle 11.2G的msvcr80.dll和tnsn ...