MQTT(消息队列遥测传输)
MQTTMessage Queuing Telemetry Transport消息队列遥测传输协议是一种轻量级、基于发布/订阅模式的消息传输协议专为受限设备、低带宽、高延迟、不稳定网络的物联网通信设计的。MQTT诞生于1999年目的是用最小的网络带宽和代码量将石油管道上的传感器数据传回控制中心。2014年MQTT正式成为OASIS标准2016年升级为ISO/IEC 国际标准。核心定位设计目标极简、开销小、省电、可靠运行在TCP/IP之上也可跑在 UDPMQTT-SN不是消息队列MQ而是消息传输协议物联网 / IoT 事实上的标准协议核心特点轻量高效协议头最小仅为2字节远低于HTTP等文本协议非常适合低带宽、高延迟或不稳定的网络。发布/订阅模式发送者发布者和接收者订阅者通过一个中间人代理Broker沟通彼此不需要知道对方的存在实现了空间、时间、同步上的完全解耦。三种服务质量QoSQoS 0至多一次发送即忘消息可能丢失。适用于不重要的数据。QoS 1至少一次保证送达但可能重复。QoS 2恰好一次通过复杂的握手保证消息不重不漏。最可靠但开销最大。最后遗嘱当设备异常断线时Broker可以自动向所有订阅者发送一条预设的“遗嘱消息”告知大家该设备已掉线。持久会话客户端断线重连后Broker会记住该客户端的订阅关系并补发离线期间错过的消息需配合QoS 1或2。工作原理Broker代理服务器是整个系统的核心负责接收所有消息并根据主题进行过滤和分发。Publisher发布者发送消息到Broker上的某个主题如home/livingroom/temperature。Subscriber订阅者向Broker订阅自己关心的主题可使用通配符如home//temperature订阅所有房间的温度。消息包含主题和负载Payload即实际数据格式透明可以是JSON、二进制等。流程示例手机App订阅主题alert/fire。烟雾传感器检测到火情发布一条消息到alert/fire负载为{ location: kitchen }。Broker收到消息后立即推送给所有订阅了alert/fire的手机App。典型应用场景MQTT最广为人知的应用是物联网但实际上它的应用范围更广物联网/车联网传感器数据上报、远程控制智能灯泡/插座、车辆状态追踪。移动应用即时通讯如Facebook Messenger早期曾使用、消息推送。能源行业石油管道、电网、水表的远程监控。工业自动化SCADA系统、PLC数据采集。智慧家居小米、Home Assistant等智能家居平台的核心协议。常用实现BrokerEMQX企业级开源支持大规模连接千万级性能强悍。MosquittoEclipse基金会项目轻量简单适合嵌入式或个人测试。VerneMQ、HiveMQ、NanoMQ面向边缘计算。客户端库几乎支持所有主流语言Python的paho-mqtt、JavaScript的mqtt.js、Go的paho.golang等。安全性考量原生MQTT安全能力较弱生产环境通常需要叠加安全措施传输加密使用TLS/SSL即MQTT over TLS通常端口8883替代明文的1883端口。身份认证用户名/密码、JWT Token、或通过TLS客户端证书进行认证。授权通过插件或规则限制客户端对特定主题的发布/订阅权限。安全建议不要使用默认配置禁用匿名访问定期更新Broker版本。与HTTP的对比维度MQTTHTTP协议模型发布/订阅异步请求/响应同步消息头大小最小2字节通常几百字节通信方向双向Broker可主动推单向客户端必须请求服务质量内置3个等级依赖底层TCP相当于QoS 0典型场景IoT、实时推送网页浏览、REST API
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2481085.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!