近日,腾讯无线网络与物联网技术负责人李秋香与高校科研教授、产业链、运营商等各行业的嘉宾一起参与了知乎「 科技共振之 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 风格。