笔者相信大家对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. 201521123028 《Java程序设计》第6周学习总结

    1. 本周学习总结 1.1 面向对象学习暂告一段落,请使用思维导图,以封装.继承.多态为核心概念画一张思维导图,对面向对象思想进行一个总结. 2. 书面作业 Q1.clone方法 1.1 Object ...

  2. php数据库操作小要点

    保留小数点后两位 $ba = floor(($v[2]/$sum[0][0])*10000); //取整数 $bb = $ba/100; //两位小数 列的值加一可以直接用自身,不用单独查询出来 $s ...

  3. linux各类压缩解压命令大全

    01-.tar格式解包:[*******]$ tar xvf FileName.tar 打包:[*******]$ tar cvf FileName.tar DirName(注:tar是打包,不是压缩 ...

  4. Struts2第九篇【OGNL、valueStack详解】

    什么是OGNL表达式? OGNL是Object Graphic Navigation Language 是操作对象属性的开源表达式. Struts2框架使用OGNL作为默认的表达式语言. 为什么我们学 ...

  5. Oracle-表被锁住

    1.如果update 某个表,没有报错,等待很久都没结束,那很有可能是表被锁了. 2.查看被锁的对象 select sid,serial#,username,SCHEMANAME,osuser,MAC ...

  6. 微信小程序--图片相关问题合辑

    图片上传相关文章 微信小程序多张图片上传功能 微信小程序开发(二)图片上传 微信小程序上传一或多张图片 微信小程序实现选择图片九宫格带预览 ETL:微信小程序之图片上传 微信小程序wx.preview ...

  7. 爬虫实战:爬虫之 web 自动化终极杀手 ( 上)

    欢迎大家前往腾讯云技术社区,获取更多腾讯海量技术实践干货哦~ 作者:陈象 导语: 最近写了好几个简单的爬虫,踩了好几个深坑,在这里总结一下,给大家在编写爬虫时候能给点思路.本次爬虫内容有:静态页面的爬 ...

  8. 在web中使用HTTPS

    背景 目前网上流行的是HTTP协议,HTTPS协议还在逐步推广的过程中. HTTP协议以明文发送内容,容易被攻击者窃听.HTTPS在HTTP的基础上加入了SSL协议,SSL依靠证书来验证服务器的身份[ ...

  9. 使用jquery的方法和技巧

    1.下载一个jquery.js的文件 2.引入jquery.js文件 <script type="text/javascript" src="__PUBLIC__/ ...

  10. GCD XOR uvalive6657

    GCD XORGiven an integer N, nd how many pairs (A; B) are there such that: gcd(A; B) = A xor B where1 ...