写点什么

MQTT 介绍及与其他协议的比较

  • 2022 年 4 月 16 日
  • 本文字数:1892 字

    阅读完需:约 6 分钟

  • 代理 Broker


MQTT 这种结构替代了传统的客户端/服务器模型,可以实现以下解耦:


  • 空间解耦,发布者和订阅者不需要知道对方


  • 时间解耦,发布者和订阅者不需要同时运行(离线消息)


  • 同步解耦,发布和接收都是异步通讯,无需停止任何处理


MQTT 协议的中心是 MQTT 服务器或代理 (broker):



MQTT 与其他协议


目前各大平台都开始支持 MQTT 协议,MQTT 相比其他协议有什么优势呢?物联网设备能不能用其他的协议呢?下面是 MQTT 与其他部分协议的比较,给大家作为参考。


MQTT 与 TCP Socket


虽然 MQTT 运行于 TCP 层之上,看起来这两者之间根本没有比较性,但笔者觉得还是有必要叙述一番,因为大多数从事硬件或嵌入式开发的工程师,都是直接在 TCP 层上通信的。从事嵌入式开发工作的人都应该知道 LwIP,LwIP 是一套用于嵌入式系统的开放源代码 TCP/IP 协议栈,LwIP 在保证嵌入式产品拥有完整的 TCP/IP 功能的同时,又能保证协议栈对处理器资源的有限消耗,其运行一般仅需要几十 KB 的 RAM 和 40KB 左右的 ROM。


也就是说,只要是嵌入式产品使用了 LwIP,就支持 TCP/IP 协议栈,进而可以使用 MQTT 协议。


《一线大厂 Java 面试题解析+后端开发学习笔记+最新架构讲解视频+实战项目源码讲义》开源由于 TCP 协议有粘包和分包问题,所以传输数据时需要自定义协议,如果传输的数据报超过 MSS(最大报文段长度),一定要给协议定义一个消息长度字段,确保接收端能通过缓冲完整收取消息。一个简单的协议定义:消息头部+消息长度+消息正文。


当然,使用 MQTT 协议则不需要考虑这个问题,这些 MQTT 都已经处理好了,MQTT 最 Java 开源项目【ali1024.coding.net/public/P7/Java/git】 长可以一次性发送 256MB 数据,不用考虑粘包分包的问题。


总之,TCP 和 MQTT 本身并不矛盾,只不过基于 Socket 开发需要处理更多的事情,而且大多数嵌入式开发模块本身也只会提供 Socket 接口供厂家自定义协议。


MQTT 与 HTTP


HTTP 最初的目的是提供一种发布和接收 HTML 页面的方法,主要用于 Web。HTTP 是典型的 C/S 通讯模式:请求从客户端发出,服务端只能被动接收,一条连接只能发送一次请求,获取响应后就断开连接。该协议最早是为了适用 Web 浏览器的上网浏览场景而设计的,目前在 PC、手机、Pad 等终端上都应用广泛。由于这样的通信特点,HTTP 技术在物联网设备中很难实现设备的反向控制,不过非要实现也不是不行,下面看一下 Web 端的例子。


目前,在微博等 SNS 网站上有海量用户公开发布的内容,当发布者发布消息,数据传到服务器更新时,就需要给关注者尽可能的实时更新内容。Web 网站基于 HTTP 协议,使用 HTTP 协议探测服务器上是否有内容更新,就必须频繁地让客户端请求服务器进行确认。在浏览器中要实现这种效果,可以使用 Comet 技术,Comet 是基于 HTTP 长连接的“服务器推”技术,主要有两种实现模型:基于 AJAX 的长轮询(long-polling)方式和基于 Iframe 及 htmlfile 的流(streaming)方式。这两种技术模型在这里不详细展开,有兴趣的读者可以查阅相关资料。


如果要实现设备的反向控制,可能就要用到前面提到的 Comet 技术。由于需要不断的请求服务器,会导致通信开销非常大,加上 HTTP 冗长的报文头,在节省流量上实在没有优势。


当然,如果只是单纯地让设备定时上报数据而不做控制,也是可以使用 HTTP 协议的。


MQTT 与 XMPP

最后

为什么我不完全主张自学?①平台上的大牛基本上都有很多年的工作经验了,你有没有想过之前行业的门槛是什么样的,现在行业门槛是什么样的?以前企业对于程序员能力要求没有这么高,甚至十多年前你只要会写个“Hello World”,你都可以入门这个行业,所以以前要入门是完全可以入门的。②现在也有一些优秀的年轻大牛,他们或许也是自学成才,但是他们一定是具备优秀的学习能力,优秀的自我管理能力(时间管理,静心坚持等方面)以及善于发现问题并总结问题。如果说你认为你的目标十分明确,能做到第②点所说的几个点,以目前的市场来看,你才真正的适合去自学。


除此之外,对于绝大部分人来说,报班一定是最好的一种快速成长的方式。但是有个问题,现在市场上的培训机构质量参差不齐,如果你没有找准一个好的培训班,完全是浪费精力,时间以及金钱,这个需要自己去甄别选择。


我个人建议线上比线下的性价比更高,线下培训价格基本上没 2W 是下不来的,线上教育现在比较成熟了,此次疫情期间,学生基本上都感受过线上的学习模式。相比线下而言,线上的优势以我的了解主要是以下几个方面:①价格:线上的价格基本上是线下的一半;②老师:相对而言线上教育的师资力量比线下更强大也更加丰富,资源更好协调;③时间:学习时间相对而言更自由,不用裸辞学习,适合边学边工作,降低生活压力;④课程:从课程内容来说,确实要比线下讲的更加深入。


应该学哪些技术才能达到企业的要求?(下图总结)




用户头像

还未添加个人签名 2022.04.13 加入

还未添加个人简介

评论

发布
暂无评论
MQTT介绍及与其他协议的比较_Java_爱好编程进阶_InfoQ写作平台