MQTT MQTT 和 CoAP 哪个协议更好?哪个最可能成为未来物联网通信标准协议呢

ThingsKit · 2020年03月04日 · 最后由 aazz 回复于 2022年08月19日 · 428 次阅读
本帖已被设为精华帖!

近日,腾讯无线网络与物联网技术负责人李秋香与高校科研教授、产业链、运营商等各行业的嘉宾一起参与了知乎「 科技共振之 5G+ 」活动,除了专业的 5G 探讨,也聊了不少和开发者们息息相关的问题。基于此,云加社区联手知乎科技,从知乎超过 10000 条 5G 相关问答中精选内容落地社区专题「 共探 5G 」。

本文为知乎用户刘凯关于“ MQTT 和 CoAP 哪个最可能成为未来物联网通信标准协议?”的内容分享。

问题:MQTT 和 CoAP 哪个最可能成为未来物联网通信标准协议?

MQTT 是 IBM 开发的一个即时通讯协议,基于 TCP 的,号称是可以支持所有的平台。
CoAP 是运行于 UDP 之上的,并且非常的小巧,最小只有 4 个字节。
可以说两者都是营运物联网大趋势和为了适应 M2M 而生的,相比于其他的通信协议也有较大的优势。
image.png 以上是最近两者的 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 风格。

ThingsKit 将本帖设为了精华贴 03月04日 13:02
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册