近日,腾讯无线网络与物联网技术负责人李秋香与高校科研教授、产业链、运营商等各行业的嘉宾一起参与了知乎「 科技共振之 5G+ 」活动,除了专业的 5G 探讨,也聊了不少和开发者们息息相关的问题。基于此,云加社区联手知乎科技,从知乎超过 10000 条 5G 相关问答中精选内容落地社区专题「 共探 5G 」。
本文为知乎用户刘凯关于“ MQTT 和 CoAP 哪个最可能成为未来物联网通信标准协议?”的内容分享。
问题:MQTT 和 CoAP 哪个最可能成为未来物联网通信标准协议?
MQTT 是 IBM 开发的一个即时通讯协议,基于 TCP 的,号称是可以支持所有的平台。
CoAP 是运行于 UDP 之上的,并且非常的小巧,最小只有 4 个字节。
可以说两者都是营运物联网大趋势和为了适应 M2M 而生的,相比于其他的通信协议也有较大的优势。
以上是最近两者的 Google trends。
话说国外貌似这两个协议非常的火啊,hivemq 等等一堆啥啥 mq,还有 pubnub、xively,CoAP 也有一大群真粉,但国内貌似不太感冒,唯一知道的是 云巴用的 mqtt,呃。。。貌似跑题了。
如上,在如今物联网如火如荼各种造势的时代,真正实现智能,M2M 是必不可少的,而 MQTT 和 CoAP 哪个最可能成为未来物联网的标准协议呢?或者有其他更有潜力的通信协议?
回答:我现在认为 CoAP 和 MQTT 的协议除了考虑设备的 TCP/UDP 堆栈实现能力和对设备的压力之外,更加重点的考虑点是:
服务器架构和开发成本?
应用本身数据流向,流量,频率,持久的需求?
长连接还是短连接?
数据分享 API 的需求?
MQTT,其实就是 IBM 把服务器间异步通讯用的消息队列 Message Queue(MQ)中间件前置到 IOT 接入而已。天生适合多对多(服务器对服务器,设备对服务器,设备对 APP),异步,后台应用,以及即时通讯(多客户端对等)场景。不过就是约定了报文头而已。自己用 Redis PubSub/MQ 也可以构建。最简单的 IOT 架构:Device+MQTT+APP,如果不存储数据的话。需要数据持久可以是:Device+MQTT+Web/APP+DB(NoSQL/NewSQL/BigData/Lambda)+APP。
CoAP,基于 UDP 接口,参考 HTTP 上的 REST API,适合数据采集这种多(设备)对一(服务器)场景,系统架构类似于传统 Web。但是 CoAP UDP 不是面对连接的,所以方向控制需要高层构建协议。CoAP 支持多播,也可以实现一对多场景,但是好像和 MQTT 不一样。应该是局域网内的多播?了解的兄弟请提点一下。但总的网站架构迎来类似于传统 Web:CoAP+Web+DB+APP。弱势是,数据必须流经 DB 转给第三方。当然,如果 Web 内部有 MQ,可以通过 REST API 暴露给第三方。
变成:
CoAP + Web + DB + APP + Redis/MQ + REST + APP
请观察最近的 BAT 动向,都把 MQTT 作为物联网前置接入套件单列出来作为标准云服务提供。阿里云物联网套件,百度开放云物联网服务 IOT,腾讯 QQ 物联平台,中移动 OneNet 开放云,Amazon IOT 服务......更别提环信,野狗之类原来做 IM 云服务的,都将 MQTT 作为 IM/IOT 共享的接入服务了。
MQTT 还有一点:长连接。采用长连接 MQTT 还是无连接 CoAP,和应用数据属性有关。是维持大量非活动长连接消耗大,还是大量 UDP 包对于服务器消耗大,我一直没有得到结论。反正我从 Windows 发起大量 UDP 压测,总是报给我操作系统端口不够的一个错误。
我之前的架构是:Socket + Web + DB(Redis/SQL)+ APP,现在不得不将 Redis 作为沟通 Socket/Web 的通道,和第三方 APP/Sever 的通道。但用 Redis PubSub 构建实现起来很麻烦。而且也不是标准实现,客户实施的周期反而不如 MQTT。所以准备改造成为上述 MQTT 协议方式。
【更新】 CoAP 大体上是采用数据报方式,可以基于 UDP,短消息,以及 6LowPAN 等传输层。而且大体上在 WSN 内部可以使用。不过由于 CoAP 也可以用于网关与云之间通讯,所以现在出现了 CoAP over TCP 的草案。不过,我觉得该草案受到 CoAP RFC7252 的约束太多,所以我和客户约定了一个版本,私底下命名为 CoTCP(CoAP over TCP)。呵呵,私有的协议。但是保留了面向资源的 REST 风格。