基于 MQTT 的文件传输
TIP
基于 MQTT 的文件传输是 EMQX 企业版功能。
物联网应用往往面临多元化数据传输的场景,设备与云端之间需要快速可靠传输各类数据。随着物联网在越来越多的行业中广泛应用,更多的应用场景被发掘出来。除了传感器数据和控制指令这样的实时结构化数据外,离线类型的文件数据,如音视频、图片和诊断日志等,也开始在物联网中扮演重要角色。
EMQX 提供了基于标准 MQTT 协议的文件传输功能,并实现了传输效率和可靠性的保障。
传统方式的缺点
在文件传输领域,已经有一些成熟的技术,例如 FTP 和 HTTP。用户可以将 MQTT 与这些技术结合使用:通过 HTTP/FTP 传输文件内容,并利用 MQTT 传输事件和文件位置信息。
这个方案实现了技术的异构融合,理论上能够充分发挥各自的优势,从而提高文件传输的效率和灵活性。然而在物联网环境下,用户可能会遇到以下问题:
- 难以协调整体流控:在物联网设备低带宽、网络环境复杂且不可靠的情况下,采用多个连接同时向云端发送数据时,难以进行整体流量控制和优先级管理。特别是在通过 HTTP/FTP 进行大文件传输时,可能会长时间占用带宽,导致关键 MQTT 消息传输受阻。
- 多个技术栈共存问题:在物联网终端中,设备通常资源有限。有些设备可能没有足够空间和处理能力引入额外技术栈。MQTT 更轻量,适用性比 HTTP/FTP 更好,能够绕过限制完成业务开发。
- 额外的开发与管理成本:现有的 MQTT 通道已经有较为完备的设备认证与授权体系,新引入的 FTP 和 HTTP 技术需要将安全与管理体系再重新实现一次,增加额外的开发和管理成本。
- 性能的限制:HTTP/FTP 技术不适用于需要支持海量连接的物联网应用,除此之外,弱网情况下频繁的重连与重传将进一步放大 HTTP/FTP 文件传输的劣势,为应用的开发和运维带来很大压力。
EMQX 中的 MQTT 文件传输
MQTT 规范没有定义传输文件的标准方式。而 EMQX 扩展了 MQTT 协议、有助于客户端设备进行高效且安全的文件传输。它定义并实现了一个建于 MQTT 之上的简单应用级协议,使客户端设备能简单得处理文件传输。
特性
基于 MQTT 的文件传输面临多个挑战,既需要解决可靠性问题,确保文件 100% 完整,又需要解决文件管理与长期存储问题,同时,还需要适配各类应用的文件读取接口,实现更好的服务集成。
为此,EMQX 文件传输功能实现了以下特性:
支持与其他业务使用同一个 MQTT 连接,充分复用现有的客户端管理体系;
支持分块传输,这意味着轻量级的客户端也能够处理大型文件,同时超过 MQTT 协议限制大小(256MB)的文件也能够被传输;
支持断点续传,客户端设备可以随时暂停文件传输以进行更高优先级的数据传输,或从网络中断中恢复传输;
可靠性保障,通过 QoS 1 级别消息进行传输,提供了校验、重传机制确保文件传输完整性;
灵活的存储层配置,上传的文件能够保存到本地指定目录或与 S3 兼容的对象存储中,方便后续使用。
优势
MQTT 作为一种轻量、灵活的消息传输协议,为企业提供了一种更加便捷和高效的文件传输解决方案。通过结构化数据与文件类型数据传输的有机结合,物联网能够实现的业务变得更加丰富多样。
统一的 MQTT 数据通道能够简化系统架构,降低应用的复杂性和维护成本。利用 EMQX 的 MQTT 文件传输功能,企业将可以实现更加便捷和多样性的物联网应用开发。
在协议层面,EMQX 文件传输基于标准的 MQTT 实现,通过指定的 MQTT 主题以及 Payload 实现整个传输流程,无需改造现有的客户端与应用即可进行集成。详细的传输协议请参考文件传输客户端开发。
下一步
了解更多关于 EMQX 中的 MQTT 文件传输:
如何使用文件传输功能: