城市直播房产教育博客汽车
投稿投诉
汽车报价
买车新车
博客专栏
专题精品
教育留学
高考读书
房产家居
彩票视频
直播黑猫
投资微博
城市上海
政务旅游

MQTT比TCP协议好在哪儿?

6月18日 断龙塔投稿
  MQTT比TCP协议好在哪儿?就好比汽车底盘上有四个轮胎就能跑了,但是想要大家开车更舒服,我们还是得给底盘加个壳。
  简单对比
  为什么要在TCP协议之上再封装一层MQTT协议呢?
  举个例子,如果你要用TCP协议做一个即时聊天室,那么你:首先写一个服务器程序,监听某个端口,这样客户端就能连接上来了。然后大家就能向自己的服务器发送数据了。但是你不希望随便谁都能连接你的服务器并且往你的服务器里发东西,于是你写了一个注册页面,让别人先去注册账号,然后他们在客户端创建连接时发送的第一个TCP报文必须包含了账号密码。这样当你收到第一个报文之后,你就能判断这个连接是否合法了。但是发过来的账号密码,具体摆在报文什么位置,也得事先约定好吧,不然怎么知道哪几位是账号哪几位是密码,于是你要求:第一个字节为1,用来告诉你这是一个请求连接的报文。然后第二个字节是报文剩下的长度(这个没啥异议,粘包处理必备),然后是饼干熊最帅这样一个固定的字符串(没啥意思,就是开心),后面紧跟着就是账号,然后是密码。但是账号有多长呢,所以账号第一个字节是账号的长度,剩下才是账号内容,这样就解决了账号有多长的问题了,密码同理。如果账号密码不匹配就断开连接并且返回一句xxxxoff,如果创建连接后半天不发送任何东西也断开连接。现在大家的客户端都连接上来了,你在服务器保存了一个账号:socket的map,能通过任何一个账号找到这个人的socket并向他发送信息。接下来大家就要开始聊天了。在聊天室中,一个人发送的消息其他人都能收到,所以你添加了聊天室的概念,用户首先去你的web页面创建聊天室,然后会得到一个聊天室的ID。然后用户要加入聊天室,必须先发送一个加入聊天室的报文。然后你要求报文第一个字节为2代表加入聊天室的请求报文,然后是报文剩余长度,然后是聊天室ID,聊天室ID有多长?我们还是用第一个字节代表长度,剩下的内容为具体ID的形式来搞定。现在有多个用户加入了聊天室,其中每个用户又都加入了多个聊天室。假设现在大家在聊天室A中开始聊天。用户甲向服务器发送消息,然后你发现你不知道这条消息是请求连接还是要加入聊天室还是干啥,所以发送消息也应该定义一种报文类型。于是你要求发送消息的报文的第一个字节为3,那么这个报文是发送到哪个聊天室的呢?于是你要求报文后面跟上聊天室ID,最后是具体的消息内容。服务器收到第一个字节为3的消息,就知道这是一个聊天消息。然后根据上面带的聊天室ID以及你在服务器存储的用户和聊天室的关系,找到了这个聊天室里的所有人,然后你就把消息发给这里面的所有人了。
  上面这个例子,在连接服务器(检查合法性、断开连接)、订阅主题(加入聊天室)、发布消息这些过程中,你约定的报文格式和设计的服务器处理逻辑就是MQTT协议的内容,当然我举的例子非常粗糙。
  MQTT是一个客户端服务端架构的发布订阅模式的消息传输协议。它的设计思想是轻巧、开放、简单、规范,因此易于实现。这些特点使得它对很多场景来说都是很好的选择,包括受限的环境:如机器与机器的通信(M2M)以及物联网环境(IoT),这些场景要求很小的代码封装或者网络带宽非常昂贵。
  MQTT的优点是:
  1)具备实时性,设备控制速度可以在200ms以内;
  2)设计简单、轻巧、便于实现;
  3)占用资源少,非常适合在资源受限的物联网芯片上运行
  当然,它的缺点也很明显:
  1)基于TCPIP,对网络环境要求相对较高;
  2)TCP存在RST攻击,容易被运营商拦截;
  3)TCP资源相对UDP消耗大,需要建立连接、维护连接、释放连接
  首先TCP是传输层协议,实现了一个双向的通信链路。
  MQTT是基于TCP的应用层协议。(当然中间可能多一层,websocket)
  两者不在一个层级,比较谁比谁好是没有意义的。
  TCP也可以实现数据通信,比如发送传感器数据到服务器。为什么要用到MQTT呢?
  假设现在有一个物联网的应用,当然可以直接用TCPsocket做通信,实际上不少人也是这么做的。然后你就会发现:
  需要自己写确认重传的机制,因为TCP连接说不定就断了。
  如果有很多个传感器(生产者),又要写代码管理这么多TCP连接呢。
  如果同时又有多个地方需要用到这些数据,还得写一个转发的逻辑。
  如果系统很复杂,参与人或公司很多,那通信格式要怎么定,怎么改,沟通成本就很大了。
  这些东西这么麻烦,又不想加班写代码,那有没有办法简便地解决呢?当然有,就是用现成的协议啦,比如MQTT。
  MQTT提供两个核心功能:
  三个级别的QOS
  基于订阅发布的消息转发服务。
  用了MQTT,上面提到的这些问题就都被优雅地解决掉啦。
  其实,同类应用的很多问题,都是有一定共性的。这时候就会有一些人提出一般性的解决方式,这样大家就不用重复造轮子,同时又保证了互操作性。这就是协议存在的意义啦。
  所以一句话总结,MQTT和其他的应用层协议,比如HTPP,FTP,BitTorrent协议一样,都是为了解决特定问题而生的一套方案,可以帮我们省好多事。
  真正的MQTT协议要求的处理逻辑和报文格式都完善很多,但是协议本身还是很简单的,具体内容去看MQTT的文档吧。
投诉 评论 转载

此处此地,一见倾心此处此地,一见倾心如果你对这条街、这座城一见如故,也许是因为哪里曾经见过它。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。……MQTT比TCP协议好在哪儿?MQTT比TCP协议好在哪儿?就好比汽车底盘上有四个轮胎就能跑了,但是想要大家开车更舒服,我们还是得给底盘加个壳。简单对比为什么要在TCP协议之上再封装一层MQTT……忆童年趣事我的家乡记忆本是祁连山下坐看日出星没的农村娃,没成想大学毕业后却工作了汉江河畔卧听渔歌唱晚,时也,命也。人到中年以后,怀旧情节与日俱增,每每夜深人静无眠时,思绪便不……数据删除002生活间走进生活,融入生活Hello!这里是斑斑!今天斑斑要和大家分享的是某个全球都可共同编辑的〔数据删除〕合集的第002号异常物品:生活间。异常物品:生活间LivingRoom代号:002……欧冠14爆冷后11小时,德甲首位下课主帅诞生!短短3天,2场北京时间9月7日下午16点,RB莱比锡官方宣布主帅特德斯科下课,双方结束272天的合作关系。在莱比锡官宣主帅特德斯科下课前11小时,他们刚在欧冠主场被顿涅茨克矿工41羞辱……茶,象征着东方,心随万境转,无喜亦无忧的通达境界1。许一半茶香,许一半时光,不负美好,不负自己2。深夜的酒,清晨的粥,不忘闲暇时的清茶一壶。3。生活乏味如干茶,单薄枯寡。待到沸水倾注,热情如火,人生茶,清香四溢如……美在身边晋在眼前丨看黄河,最好到壶口瀑布黄河是中华民族的母亲河壶口瀑布是镶嵌在九曲黄河之上的一颗璀璨的明珠也是世界上唯一的金黄色大瀑布壶口瀑布既是国家AAAA级旅游景区又是国家级地质公园……25款内蒙家常菜,做法独特,口味多样,收藏起来学会做给家人吃25款内蒙特色家常菜,做法独特,下饭一绝,收藏起来学会做给家人吃吧。内蒙腌猪肉1。猪肉清洗干净,,皮上的毛处理干净,切成条块。2。猪油切细条或者片状,便于炼油……李未可再获字节跳动首轮融资打造中国第一个科技潮牌2022年下半年,李未可将正式推出设备产品。近日,杭州李未可科技有限公司显示发生股东变更,新增字节跳动关联公司北京量子跃动科技有限公司,获得由字节跳动独家投资的首轮融资。……小孩玩手机误点14份披萨,网友对孩子太放纵,不能怪商家感谢您的喜欢,点击右上角关注和小美一起发现这个多彩的世界吧网络的发展和各种智能设备的普及,给人们的生活提供了很大的便利。不管是买大件的家居用品,还是买平时吃的饭菜,只要拿……2023最好的打开方式1重启自己新的一年已然到来。好事坏事,皆成往事,昨年的成就和遗憾都一并归零。请重启自己,然后大步向前。人生的主动权,永远把握在那些敢于重新出发的人手中。正如阅……神仙打架斯诺克年度十佳对决年度第十尼尔罗伯逊5:3马克威廉姆斯,英格兰公开赛四分之一决赛随着罕见的暴风雪,英格兰公开赛来到了布伦特伍德举办。赛事伊始出现的取暖设备故障让场馆的温度骤降,然而随着赛事……
在勇士队,格林谈到他最喜欢汤普森的时刻华为Mate50标准版,它适合你吗?贵州科比表示有朝一日可以去洛杉矶湖人现场打球?来陕西必吃的10大特色美食,本地人吃着满足,外地人吃了赞叹一个家过得幸不幸福,不用猜,就看三个地方柬埔寨经济强劲复苏坦克世界铸甲开炉活动开启,金币坦克等你拿二十四节气由何而来?中国最古老天文遗迹告诉你韦伯望远镜能探测外星文明的工业废气人走茶凉,曲终人会散,何炅48岁的生日,折射出娱乐圈的人情冷嫁给身家10亿的杜海涛沈梦辰婚后变阔太穿衣大变背13万爱马仕国米看走眼!3选1做出最差选择,如今认清现实被马洛塔坑惨了
孕妈妈如何预防新生儿黄疸不肯为女生花钱的男生,是不在乎女生吗?梁姓男孩洋气名字512GB存储空间随便浪!盘点目前好用的大容量旗舰手机热文聚 【歌词】谁说我们不会爱主题曲歌手:海鸣威热评聚热点网 彭富春艺术创造中的艺术家介绍家乡的房子作文2022年养老金18连涨的具体调整幅度将在6月底出台拼车发生事故保险怎么赔偿精选孙中山名言名句简短小说唯美语录经典2021全国最美教师事迹材料

友情链接:中准网聚热点快百科快传网快生活快软网快好知文好找江西南阳嘉兴昆明铜陵滨州广东西昌常德梅州兰州阳江运城金华广西萍乡大理重庆诸暨泉州安庆南充武汉辽宁