MQTT(Message Queuing Telemetry Transport,消息队列遥测传输)是IBM开发的一个即时通讯协议,有可能成为物联网的重要组成部分。该协议支持所有平台,几乎可以把所有联网物品和外部连接起来,被用来当做传感器和致动器(比如通过Twitter让房屋联网)的通信协议。

MQTT是轻量级基于代理的发布/订阅的消息传输协议,它可以通过很少的代码和带宽和远程设备连接。例如通过卫星和代理连接,通过拨号和医疗保健提供者连接,以及在一些自动化或小型设备上,而且由于小巧,省电,协议开销小和能高效的向一和多个接收者传递信息,故同样适用于称动应用设备上。

相信在想深入学习这个协议必是奔着解决某个问题而来的,上面给出了适用的场景,我之所以想深入的学习和了解这个协议,理由如下:

可以实现手机消息推送(PUSH)
    协议简单,最小的头部只需2个字节,特别适合于嵌入式设备场景中。
    这是个了解什么是协议绝好的例子。相比于其它复杂的协议例如tcp、http协议,至少说明文档看的下去。

MQTT简介

早在1999年,IBM的Andy Stanford-Clark博士以及Arcom公司ArlenNipper博士发明了MQTT(Message Queuing Telemetry Transport,消息队列遥测传输)技术 。

MQTT的话题是他们在谈论开源物联网平台Pachube时提到的。Stanford-Clark认为Pachube很酷,其不足之处是不具备真正的推送功能。你需要不断的进行轮询才能得到即时数据。这正是MQTT能够实现的,他提到了使用推送通信系统的石油管道检测系统。

MQTT应用现状

IBM和St. Jude 医疗中心通过MQTT开发了一套Merlin系统,该系统使用了用于家庭保健的传感器。St. Jude医疗中心设计了一个叫做Merlin@home的心脏装置,这种无线发射器可以用来监控那些已经植入复律-除颤器和起搏器(两者都是基本的传感器)的心脏病人。

该产品利用MQTT把病人的即时更新信息传给医生/医院,然后医院进行保存。这样的话,病人就不用亲自去医院检查心脏仪器了,医生可以随时查看病人的数据,给出建议,病人在家里就可以自行检查。即时通讯聊天软件app开发可以加蔚可云的v:weikeyun24咨询

IBM称该发射器包括一个大型触摸屏,一个嵌入式键盘平台,以及一个Linux操作系统。

在未来几年,MQTT的应用会越来越广,值得关注。

通过MQTT协议,目前已经扩展出了数十个MQTT服务器端程序,可以通过PHP,JAVA,Python,C,C#等系统语言来向MQTT发送相关消息。

此外,国内很多企业都广泛使用MQTT作为Android手机客户端与服务器端推送消息的协议。其中Sohu,Cmstop手机客户端中均有使用到MQTT作为消息推送协议。据Cmstop主要负责消息推送的高级研发工程师李文凯称,随着移动互联网的发展,MQTT由于开放源代码,耗电量小等特点,将会在移动消息推送领域有更多的贡献,在物联网领域,传感器与服务器的通信,信息的收集,MQTT都可以作为考虑的方案之一。在未来MQTT会进入到我们生活的各各方面。

如果需要下载MQTT服务器端,可以直接去MQTT官方网站点击software进行下载MQTT协议衍生出来的各个不同版本。

MQTT特点

MQTT协议是为大量计算能力有限,且工作在低带宽、不可靠的网络的远程传感器和控制设备通讯而设计的协议。

它具有以下主要的几项特性:

1、使用发布/订阅消息模式,提供一对多的消息发布,解除应用程序耦合:
这一点很类似于XMPP,但是MQTT的信息冗余远小于XMPP(因为XMPP使用的是XML这种格式来传递数据,你懂的)。

2、对负载内容屏蔽的消息传输。

3、使用TCP/IP提供网络连接:
主流的MQTT是基于TCP连接进行数据推送的,但是同样有基于UDP的版本,叫做MQTT-SN。这两种版本由于基于不同的连接方式,优缺点自然也就各有不同了。

4、有三种消息发布服务质量:

“至多一次”,消息发布完全依赖底层TCP/IP网络。会发生消息丢失或重复:
    这一级别可用于如下情况,环境传感器数据,丢失一次读记录无所谓,因为不久后还会有第二次发送。这一种方式主要普通APP的推送,倘若你的智能设备在消息推送时未联网,推送过去没收到,再次联网也就收不到了。
    “至少一次”,确保消息到达,但消息重复可能会发生:
    这一种方式比较鸡肋,在我的想象中没能想到这种质量的发送在常规的APP开发中有什么用处。
    “只有一次”,确保消息到达一次:
    这一级别可用于如下情况,在计费系统中,消息重复或丢失会导致不正确的结果。这种最高质量的消息发布服务还可以用于即时通讯类的APP的推送,确保用户收到且只会收到一次。

5、小型传输,开销很小(固定长度的头部是2字节),协议交换最小化,以降低网络流量:
这就是为什么在介绍里说它非常适合“在物联网领域,传感器与服务器的通信,信息的收集”,要知道嵌入式设备的运算能力和带宽都相对薄弱,使用这种协议来传递消息再适合不过了。

6、使用Last Will和Testament特性通知有关各方客户端异常中断的机制:

Last Will:即遗言机制,用于通知同一主题下的其他设备发送遗言的设备已经断开了连接。
    Testament:遗嘱机制,功能类似于Last Will 。

市面上的主流推送方案应用比较

APNS(Apple Push Notification Service)和GCM(Google Cloud Messaging)

APNS和GCM是iOS和Android两大阵营提出的官方推送方案,这两者的技术架构较为相似。都是由系统来统一的维护一个长连接,所有的APP统一发送心跳和接收推送。

APNS使用的方便性毋庸置疑,但是GCM却在国内举步维艰,具体原因有以下三个:

Google与我国政府交恶,导致GMS(Google Mobile Service)在国内无法正常使用,而GCM是依赖于GMS的,所以无法顺利使用。
    由于国内2G和移动3G的NAT超时时间都小于GCM心跳时间(28分钟),TCP长连接必然无法保活,每次都要等28分钟心跳失败重连后才能收到Push。
    某些运营商可能限制了5228端口,移动3G/2G下,发现几乎无法连接上GCM服务器,也就无法获得GCM通知,WhatsApp放后台10分钟后,经常很长时间都收不到Push消息。

XMPP

XMPP是一种基于标准通用标记语言的子集XML的协议,它继承了在XML环境中灵活的发展性。因此,基于XMPP的应用具有超强的可扩展性。经过扩展以后的XMPP可以通过发送扩展的信息来处理用户的需求,以及在XMPP的顶端建立如内容发布系统和基于地址的服务等应用程序。而且,XMPP包含了针对服务器端的软件协议,使之能与另一个进行通话,这使得开发者更容易建立客户应用程序或给一个配好系统添加功能。

XMPP的优点是:协议成熟,强大,可扩展性强,并且有成熟的开源方案。
XMPP的缺点是:信息冗余量大(信息的格式是 XML),因而费流量,费电。

MQTT

MQTT的具体概念已经在上面的文字中介绍过了,总结如下:

MQTT的优点是:协议简洁轻巧,数据冗余量低。并且支持的设备从智能硬件到智能手机无所不包。
MQTT的缺点是:服务器端实现难度大,虽然已经有了C++版本的服务端组件,但是并不开源。而且在推送数量较大时如何处理并发是十分考验后台人员的技术水平的。

HTTP轮询

HTTP轮询就是在一个给定的时间间隔后,定时向服务器发送请求,查看是否有新的数据。

HTTP轮询的优点是:实现简单、可控性强,部署硬件成本低。
HTTP轮询的缺点是:实时性差,只有时间到了才会向服务器查看是否有新的数据。两次请求之间的时间间隔过大,则失去了即时推送的意义。但如果设置的时间间隔较短的,又会费电费流量。

第三方推送

在推送这一分支领域有许许多多的第三方推送服务,例如:极光,个推等。

优点是:集成方便。
缺点是:大量推送数据后,付费服务是在所难免。而且因为是通用共享云,所以你的服务质量是否有保证,也就不能要求太多了,必竟你一毛钱也没出或者也不打算出。

认识即时通讯开发通信协议之MQTT相关推荐

  1. im即时通讯开发的那些坑:架构设计、通信协议和客户端

    有过移动端开发经历的开发者都深有体会:移动端IM的开发,与传统PC端IM有很大的不同,尤其无线网络的不可靠性.移动端硬件设备资源的有限性等问题,导致一个完整的移动端IM架构设计和实现都充满着大量的挑战 ...

  2. im即时通讯开发:IM通信协议设计详解

    本文要谈的IM通信协议指的是应用层通信"语言",并非指传输层协议(如TCP.UDP).IM通信协议的制定是IM开发中起点,也是贯穿设计.开发.运维始终的核心所在,通信协议设计的好坏 ...

  3. Android 即时通讯开发小结(一)

    本文将基于 IM Andriod 开发的各种常见问题,结合网易云信即时通讯技术的实践,对 IM 开发做一个全面的总结. 客户端架构 作为一个 IM 软件,最重要的一个特性就是保证消息的达到率和实时性. ...

  4. im即时通讯开发:移动端需要面对的问题

    统一介绍下一个IM APP的方方面面,包括技术选型(包括通讯方式,网络连接方式,协议选择)和常见问题. P2P还是服务器中转? IM通讯方式无非两种选择:设备直连(P2P)和通过服务器中转. 1P2P ...

  5. 谈谈即时通讯开发平台

    由于即时通讯系统的复杂性和对服务器稳定性的很高要求,一般即时通讯系统开发至少需要1年左右的时间,而这还只是测试版,离"稳定"还有一定距离,而这时匆匆上马的不稳定的系统会让你失去用户 ...

  6. Android 即时通讯开发小结(二)

    <Android 即时通讯开发小结>基于IM Andriod 开发的各种常见问题,结合网易云信即时通讯技术的实践,对 IM 开发做一个全面的总结. 相关推荐阅读:. Android即时通讯 ...

  7. im即时通讯开发:高可用、易伸缩、高并发的IM群聊、单聊架构方案设计

    要实现一整套能用于大用户量.高并发场景下的IM群聊,技术难度远超IM系统中的其它功能,原因在于:IM群聊消息的实时写扩散特性带来了一系列技术难题. 举个例子:如一个2000人群里,一条普通消息的发出问 ...

  8. 基于Netty实现分布式IM即时通讯开发

    计算机编程的学习,能不能把知识学到手,讲究的是动手实践.在我编写的文章中,基本都是以实践代码验证结果为核心来讲述文章内容. 可能有人不知道 Netty 是什么,这里简单介绍下: Netty 是一个 J ...

  9. im即时通讯开发:聊天消息的同步和存储

    IM全称是『Instant Messaging』,中文名是即时通讯.在这个高度信息化的移动互联网时代,生活中IM类产品已经成为必备品,比较有名的如钉钉.微信.QQ等以IM为核心功能的产品.当然目前微信 ...

  10. im即时通讯开发之后台应用保活、消息推送的噩梦

    Android P的最后一个开发者预览版(即DP5)已如期发布于2018年7月26日,根据上面这张发布路线图,相信Android P的正式版将很快到来.对于Andriod开发者来说,不管Andriod ...

最新文章

  1. 调试来自于逐飞的MM32F3277移植有MicroPython开发板
  2. 贪心入门——出租车费
  3. Struts2 为什么被淘汰?自己作死!
  4. 【转】golang-defer坑的本质
  5. linux之more命令
  6. Ajax:前台利器—Ajax
  7. mysql-connector-java驱动包下载地址收藏 mysql驱动包下载地址
  8. 仅此一文带您走入智能叮当的世界
  9. 通过概率规划归纳的人类水平概念学习
  10. 《路由器开发 - 路由器刷机指南》联想Newifi Y1刷机
  11. 【Python军火库】Re基础入门:正则表达式
  12. Nginx中root与alias区别
  13. 腾讯2021校园招聘技术类编程题汇总
  14. Python 自学笔记----1.1实例与封装
  15. 网页设计参考资料一波
  16. html 手机qq图片预览,模拟QQ心情图片上传预览示例
  17. 机器翻译:西班牙文「---」英文
  18. 用Mouse_event()来控制鼠标操作
  19. iPad忘记密码,怎么解锁设备?
  20. H5 jq+canvas实现pc写字板功能

热门文章

  1. Scrapy项目 - 数据简析 - 实现豆瓣 Top250 电影信息爬取的爬虫设计
  2. 路由器桥接dns服务器未响应,360路由器无线桥接的设置方法(电脑)?
  3. 路由器桥接显示无法连接服务器,路由器无法桥接怎么办
  4. 达梦DM7数据库服务启动异常,管道文件已存在,DmAPService dead but pid file exists
  5. JS 基础: 你真的了解 console 吗?
  6. 计算机管理用户组不见了,win7系统计算机管理本地用户和组不见了的解决方法...
  7. 如何在PPT中设置选择题
  8. 读书笔记:打造知识体系
  9. 北德克萨斯大学计算机系,美国北德克萨斯大学计算机科学与工程系主任Barrett Bryant访问昆明理工大学...
  10. 渗透工具SharpXDecrypt:Xshell全版本凭证一键恢复工具,针对Xshell全版本在本地保存的密码进行解密