IOT设备通讯协议MQTT

IOT设备通讯协议MQTT

哈喽大家好呀!笔者的公司最近在做IOT设备相关的业务,基于这个契机寻找学习了一下关于IOT通讯协议相关的内容,最终在技术选型上选择了使用MQTT协议并且结合EMQ上层MQTT中间件实现提供链接服务,那么本轮博文就和大家来一起探讨学习有关IOT设备的相关特性和MQTT协议的本质.

附上:

喵了个咪的博客:w-blog.cn

MQTT官方 : https://github.com/mqtt/mqtt.github.io

服务中间件列表: https://github.com/mqtt/mqtt.github.io/wiki/servers

客户端列表: https://github.com/mqtt/mqtt.github.io/wiki/libraries

1.IOT设备的特性

在讨论标题的这个问题的时候我们需要先弄清楚IOT设备是什么,IOT设备和传统的智能设备有什么区别,笔者总结下的IOT设备有如下特点:

  • 硬件能力差(存储能力基本只有几MB,CPU频率低连使用HTTP请求都很奢侈)
  • 系统千差万别(Brillo,mbedOS,RIOT等)
  • 如使用电池供电,电量消耗敏感
  • 如果是小设备设备基数大需要维持大量在线链接
  • 网络情况不稳定,移动网络网络资费贵,需要尽量减少开销和稳定

在以上这样苛刻的场景下很多技术上常用在智能设备方案都望而却步,总结一下我们主要面对下面三个问题:

  • socket.io,websocket? 不同的系统可能无法使用HTTP,设备资源可能使用HTTP都奢侈
  • TCP/IP自定协议? 虽然不用在意系统,自定义报文怎么解决网络开销问题?
  • 自主研发成本高,使用第三方IOT平台容易被技术或硬件绑定

2. MQTT为什么适合IOT场景

MQTT(Message Queuing Telemetry Transport,消息队列遥测传输)是IBM开发的一个即时通讯协议,使用方式比较类似于队列软件比如RabbitMQ,使用发布/订阅的方式提供互相之间的通讯,MQTT是为在计算能力有限,且工作在低带宽、不可靠的网络的远程传感器和控制设备通讯而设计的协议,它具有以下主要的几项特性:

  • 该协议支持所有平台,几乎可以把所有联网物品和外部连接起来
  • 有三种消息发布服务质量

    • “至多一次”,消息发布完全依赖底层 TCP/IP 网络。会发生消息丢失或重复。这一级别可用于如下情况,环境传感器数据,丢失一次读记录无所谓,因为不久后还会有第二次发送。
    • “至少一次”,确保消息到达,但消息重复可能会发生。
    • “只有一次”,确保消息到达一次。这一级别可用于如下情况,在计费系统中,消息重复或丢失会导致不正确的结果。
  • 小型传输,开销很小(固定长度的头部是 2 字节),协议交换最小化,以降低网络流量;
  • 使用 Last Will 和 Testament 特性通知有关各方客户端异常中断的机制;

除了MQTT的协议特性外还有一些客观原因:

  • 对语言友好主流语言的客户端都有
  • 大部分硬件方案天生支持
  • 数十个MQTT服务器端程序可供选择
  • 社区成熟解决方案被广泛运用遇到问题方便寻求帮助

以上基本是我们为什么也会选择MQTT作为IOT协议的原因,需要更多的了解或者查看客户端支不支持和服务端实现可以参考官方github:

MQTT官方 : https://github.com/mqtt/mqtt.github.io
服务中间件列表: https://github.com/mqtt/mqtt.github.io/wiki/servers
客户端列表: https://github.com/mqtt/mqtt.github.io/wiki/libraries

3 总结

关于MQTT的解释只是一个开篇,下一章节将说到我们的主角EMQ百万级MQTT消息服务,那么多谢大家的关注我们下节见……

注:笔者能力有限有说的不对的地方希望大家能够指出,也希望多多交流!

上一篇:Hibernate三种状态的区分


下一篇:无影云电脑征文