
MQTT协议是什么
- 【现状】MQTT(Message Queuing Telemarty Transport),是一种精简的,基于发布-订阅模式的消息传输协议,主要用于物联网等不可靠网络环境下的消息传输,提供消息质量的控制(消息重传机制),其基于TCP/IP协议。
- 【为什么】IoT设备联网,运行在低带宽、高延时的网络环境下,长链接需求,这些催生了MQTT协议。其非常精简,传输的数据量减小,提供客户端自由的发布、订阅主题,提供消息质量自由控制,支持会话控制(即长链接),另外其提供Last Will机制可以通知同主题下的其他设备当前设备已经断开。
为什么是MQTT
- 【目的】一种可行的publish/subscribe模式的消息传输范式,与之区别的是pull/get模式,轻量级,消息内容可自由定义的协议,MQTT最大优点在于,可以以极少的代码和有限的带宽,为连接远程设备提供实时可靠的消息服务。
- 【大厂背书】
- Facebook Messager 上用了 MQTT 的多个特性用于网络聊天;
- 在 2015 年,亚马逊网络服务平台宣布 Amazon Iot 是基于 MQTT 的
- 国内百度IoT
- ....
限制在哪里
找了一下午,我主要想弄明白,对于移动终端完全使用MQTT,放弃http是否可行,对于传输的数据量,可能单次请求达50M左右,这种情况下MQTT是否能胜任。以下是找到的写参考资料,很多是热心网友的帖子。
- 消息并非实时的送达,网友反映心跳间隔设置为3分钟,anroid默认是20分钟,还有消息延迟、丢消息情况
- 阿里云MQTT限制,payload最大支持64k
- Netty实现MQTT协议,大消息失败原因排查
- google云的文章测试MQTT,主要结论是:
- MQTT建立链接的开销很大,必须要重用链接
- MQTT消息payload增大了10倍,可能时间传输的数据仅仅增大了1倍(这个不理解啥意思)
- 减小payload
-
MQTT消息优化,一个分析消息优化的内容,不要使用QoS2,topic Name尽量简单。
QoS定义https://blog.csdn.net/acongge2010/article/details/79157945
得出的结论:MQTT协议payload最大为256M,结合protobuf进行数据压缩,可以完全用来实现与服务端的信息交互。
怎么选择
- mosquitto,activeMQ等开源产品,其中mosquitto最优秀
- 阿里云(收费),payload支持最大64k,只能作为控制指令进行使用,省去了自己维护一套消息服务端运维成本,还需要结合http接口提供给设备使用。
网友评论