MQTT——入门介绍
笔者相信大家对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——入门介绍的更多相关文章
- (转)MQTT 入门介绍
原文链接:https://blog.csdn.net/qq_2887... MQTT 入门介绍 一.简述 MQTT(Message Queuing Telemetry Transport,消息队列遥测 ...
- MQTT 入门介绍——菜鸟教程
一.简述 MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议),是一种基于发布/订阅(publish/subscribe)模式的"轻量级& ...
- MQTT入门介绍
一简述 MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议),是一种基于发布/订阅(publish/subscribe)模式的"轻量级&q ...
- MQTT 入门介绍
一.简述 MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议),是一种基于发布/订阅(publish/subscribe)模式的"轻量级& ...
- C# BackgroundWorker组件学习入门介绍
C# BackgroundWorker组件学习入门介绍 一个程序中需要进行大量的运算,并且需要在运算过程中支持用户一定的交互,为了获得更好的用户体验,使用BackgroundWorker来完成这一功能 ...
- 初识Hadoop入门介绍
初识hadoop入门介绍 Hadoop一直是我想学习的技术,正巧最近项目组要做电子商城,我就开始研究Hadoop,虽然最后鉴定Hadoop不适用我们的项目,但是我会继续研究下去,技多不压身. < ...
- [Python爬虫] 在Windows下安装PhantomJS和CasperJS及入门介绍(上)
最近在使用Python爬取网页内容时,总是遇到JS临时加载.动态获取网页信息的困难.例如爬取CSDN下载资源评论.搜狐图片中的“原图”等,此时尝试学习Phantomjs和CasperJS来解决这个问题 ...
- [Python爬虫] scrapy爬虫系列 <一>.安装及入门介绍
前面介绍了很多Selenium基于自动测试的Python爬虫程序,主要利用它的xpath语句,通过分析网页DOM树结构进行爬取内容,同时可以结合Phantomjs模拟浏览器进行鼠标或键盘操作.但是,更 ...
- JavaScript入门介绍(二)
JavaScript入门介绍 [函数] 函数function 是Javascript的基础模块单元,用于代码的复用.信息影藏和组合调用. function a(){} 函数对象Function Lit ...
随机推荐
- 201521123006 《Java程序设计》 第2周学习总结
1. 本周学习总结 本周进一步学习了java,了解了java编程中一些特定的用法,比如:在编译程序时可以使用import来减少输入包名称.本周还学会了使用枚举类(enum Choice{fab,sor ...
- 201521123056 《Java程序设计》第9周学习总结
1. 本周学习总结 1.1 思维导图如下: 2. 书面作业 本次PTA作业题集异常 1. 常用异常 题目5-1 1.1 截图你的提交结果(出现学号) 1.2 自己以前编写的代码中经常出现什么异常.需要 ...
- 201521123092《java程序设计》第十周学习总结
1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结异常与多线程相关内容. 2. 书面作业 本次PTA作业题集异常.多线程 1.finally 题目4-2 1.1 截图你的提交结果(出 ...
- centos7配置dhcp
用su 获取root权限 用yum -y install dhcp命令安装dhcp服务(yum是基于RPM包管 理,自动下载RPM包并且安装) 查看安装后生成的配置文件 rpm -qc dhcp 编辑 ...
- 前端里移动端到底比pc端多哪些知识?
端里移动端到底比pc端多哪些知识,为啥面试时好多公司都问h5水平如何? 我做过几年的web前端开发,就简单谈谈自己的感受吧.首先来看看PC端和移动端在前端开发上的一些区别:(1)PC考虑的是浏览器兼容 ...
- Extjs2.0 desktop 动态创建桌面图标和开始菜单
这几天一直纠结Extjs desktop怎么动态读取数据,用Ext.net已经实现但是不灵活.Ext.net做出来的桌面在窗口关闭后只是隐藏该窗口,并没有释放,对于我这种js菜鸟来说,改那一坨代码要人 ...
- Maven搭建SpringMVC+MyBatis+Json项目(多模块项目)
一.开发环境 Eclipse:eclipse-jee-luna-SR1a-win32; JDK:jdk-8u121-windows-i586.exe; MySql:MySQL Server 5.5; ...
- oss滤网图片音视频过滤(1)内容检测
图片音视频过滤有好多方法,我这里就不一一介绍了,这篇文章只是简单介绍一下我在项目中使用阿里云oss滤网过滤的步骤 1.所遇问题: 1.图片视频鉴别时要设置textScanRequest.setUriP ...
- JSP入门3 Servlet
需要继承类HttpServlet 服务器在获得请求的时候会先根据jsp页面生成一个java文件,然后使用jdk的编译器将此文件编译,最后运行得到的class文件处理用户的请求返回响应.如果再有请求访问 ...
- ObjectSNMP
下面的例子,就是使用ObjectSNMP获取RFC1213-MIB的例子:其中的system和ifTable对象就是对应的SNMPMIB中的system组合interface中的ifTable表. p ...