最近在学习MQTT,看了许多的文档,也看了一些相关Python代码,收获很大。这里记录下来,一方面自己用来复习,另一方面希望可以帮助到后面新接触MQTT的小伙伴。
网上看到了一个IoT应用的协议体系,觉得很好,先拿出来分享下(侵删):
从上图可以看出,HTTP/MQTT/CoAP都是位于OSI网络协议的应用层。以下是这几个协议的区别。
1. HTTP(超文本传输协议)
基于TCP协议,采用C/S模型,会话方式是请求/应答,并且这些会话都是客户端发起,缺少服务器通知客户端的机制,在需要通知的场景,客户端应用需要不断地轮询服务器。
对于嵌入式设备来说,需要传输的数据太多,太重,不够灵活。
2. WebSockets
这个是在HTTP的基础上发展而来,提供了C/S的双向通信,取代了HTTP的双向通讯轮询机制。但是更多的是应用于Web浏览器应用。
MQTT over WebSockets为MQTT消息在Web browser的展示提供了接口。
3. CoAP(受限制的应用协议)
基于UDP协议,RESET架构,主要是server和client之间的一对一消息传递协议。主要用于资源受限型的设备和低功耗无线局域网环境。内置发现支持和内容协商,不需要事先知道消息格式。区别于MQTT的长连接,CaAP采用无连接方式。
4. MQTT(消息队列遥测传输)
基于TCP协议,采用二进制的发布/订阅模式。这个最早是IBM开发的一个即时通讯协议,是为大量计算能力有限且工作在低带宽、不可靠网络的远程传感器和控制设备通讯而设计的一种协议。是为了物联网场景而优化,提供多个QoS,还有层级主题和遗嘱等特性。
5. kafka
kafka其实和MQTT不是一个东西,但是都采用发布/订阅模式。Kafka是已经实现的开源流处理平台。主要用于消息系统,行为跟踪和日志手机。为数据集成的场景,通过分布式架构提供消息处理,高容错的方式存储海量数据流,包装数据流的顺序等特性。服务质量只有1,减少确认从而提高并发。
MQTT broker 用来快速的对大量物联网设备发来的消息做接收处理响应,而Kafka 对这些大量的数据做采集存储,交给数据分析人员来分析处理消息,这一流程或许会成为未来物联网云平台的一大通用范式。
kafka参考:https://blog.csdn.net/yeshenzzrff/article/details/79021479