三大轻量通信协议:XMPP/MQTT/CoAP

/ 0评 / 0

所有物联网应用都离不开协议,其中MQTT看起来最主流,CoAP也有很多实现的.

XMPP最强大,能实现用户组,用户层分级,而且协议很成熟,但是基于XML的话比较占资源,同时也会消耗更多的流量,数据的有效载荷也有30%左右.协议复杂带来的问题还是比较多的,比如设备要求上去了,不是什么乱七八糟设备都能用这样的协议.在单片机上跑协议栈已经是一个不小的开销了,还要同时兼顾XML的编解码,那是更加大的消耗,如果换用普通WebSocket方法,虽然可以用JSON约束格式,但是服务器并发啊之类的当然不如现成协议,在资源足够的前提下,上XMPP当然是最省心的.目前来说,很多手机APP和服务器通信都会优选XMPP,其次某些应用会用HTTP请求之类.但是,都要进行解码,不管是XML还是JSON,都要额外资源.

MQTT简洁,实现三种不同的QOS,但是需要保持心跳,心跳包是收发2字节(共4字节),就算按照一分钟一包,一个月下来也消耗不了1MB流量.对于大多数物联网卡,一个月也有5MB+流量了,实现MQTT只需要在协议栈上做一些字符串拼接,就完全可以实现了.当然,协议栈必须支持TCP协议,TCP又比较耗费资源.而且TCP需要保持长连接,还要网络状态比较好,否则经常重连也能带来额外的开销,严重的时候,不堪设想.MQTT需要中心服务器,所有人都可以订阅,发布主题.

CoAP最简单,使用UDP方式,没有状态,实现了一定程度的保证,和MQTT类似,只需要在协议栈上多实现一个字符串拼接就可以了,只不过现在不需要TCP这么复杂了,UDP足以,虽然UDP打开的端口是不能关闭的,但是不会有心跳开销,当然,服务器推送过来的数据,也未必能收到,依赖重新定义的CON应答机制来确认收到与否.有时候,这样的流量开销显得更大.但是对MCU的要求更低了,CoAP是点对点,服务器对点,有主从关系.

在资源受限环境下,是MQTT合适还是CoAP合适,这个要看实际应用,比如CoAP在NAT环境下,服务器就没法主动跟设备通信了,但是如果设备是个传感器,只是定时发送温度上去,漏一两个数据平滑过去就没事了.那么CoAP明显节约.如果要受控制的,比如空调温度设定,那么MQTT比较合适,如果更大的数据量,那也不是这些小单片机做的了吧.

都是个人的一些看法,随便说说.

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注