当前位置: 首页 > news >正文

创建MQTT连接时如何设置参数?

MQTT连接的基本概念MQTT 连接由客户端向服务器端发起。任何运行了 MQTT 客户端库的程序或设备都是一个MQTT客户端 而 MQTT服务器则负责接收客户端发起的连接并将客户端发送的消息转发到另外一些符合条件的客户端。客户端与服务器建立网络连接后需要先发送一个CONNECT数据包给服务器。服务器收到CONNECT包后会回复一个CONNACK给客户端客户端收到CONNACK包后表示 MQTT 连接建立成功。如果客户端在超时时间内未收到服务器的CONNACK数据包就会主动关闭连接。大多数场景下MQTT 通过 TCP/IP 协议进行网络传输但是 MQTT 同时也支持通过 WebSocket 或者 UDP 进行网络传输。MQTT over TCPTCP/IP 应用广泛是一种面向连接的、可靠的、基于字节流的传输层通信协议。它通过 ACK 确认和重传机制能够保证发送的所有字节在接收时是完全一样的并且字节顺序也是正确的。MQTT 通常基于 TCP 进行网络通信它继承了 TCP 的很多优点能稳定运行在低带宽、高延时、及资源受限的环境下。MQTT over WebSocket近年来随着 Web 前端的快速发展浏览器新特性层出不穷越来越多的应用可以在浏览器端通过浏览器渲染引擎实现Web 应用的即时通信方式 WebSocket 也因此得到了广泛的应用。很多物联网应用需要以 Web 的方式被使用比如很多设备监控系统需要使用浏览器实时显示设备数据。但是浏览器是基于 HTTP 协议传输数据的也就无法使用 MQTT over TCP。MQTT 协议在创建之初便考虑到了 Web 应用的重要性它支持通过 MQTT over WebSocket 的方式进行 MQTT 通信。MQTT连接参数的使用连接地址MQTT 的连接地址通常包含 服务器 IP 或者域名、服务器端口、连接协议。基于 TCP 的 MQTT 连接mqtt是普通的 TCP 连接端口一般为 1883。mqtts是基于 TLS/SSL 的安全连接端口一般为 8883。比如mqtt://broker.emqx.io:1883是一个基于普通 TCP 的 MQTT 连接地址。基于 WebSocket 的连接ws是普通的 WebSocket 连接端口一般为 8083。wss是基于 WebSocket 的安全连接端口一般为 8084。当使用 WebSocket 连接时连接地址还需要包含 Path EMQX 默认配置的 Path 是/mqtt。比如ws://broker.emqx.io:8083/mqtt是一个基于 WebSocket 的 MQTT 连接地址。客户端ID(Client ID)MQTT 服务器使用 Client ID 识别客户端连接到服务器的每个客户端都必须要有唯一的 Client ID。Client ID 的长度通常为 1 至 23 个字节的 UTF-8 字符串。如果客户端使用一个重复的 Client ID 连接至服务器将会把已使用该 Client ID 连接成功的客户端踢下线。用户名与密码(Username Password)MQTT 协议可以通过用户名和密码来进行相关的认证和授权但是如果此信息未加密则用户名和密码将以明文方式传输。如果设置了用户名与密码认证那么最好要使用mqtts或wss协议。大多数 MQTT 服务器默认为匿名认证匿名认证时用户名与密码设置为空字符串即可。连接超时(Connect Timeout)连接超时时长收到服务器连接确认前的等待时间等待时间内未收到连接确认则为连接失败。保活周期(Keep Alive)保活周期是一个以秒为单位的时间间隔。客户端在无报文发送时将按 Keep Alive 设定的值定时向服务端发送心跳报文确保连接不被服务端断开。在连接建立成功后如果服务器没有在 Keep Alive 的 1.5 倍时间内收到来自客户端的任何包则会认为和客户端之间的连接出现了问题此时服务器便会断开和客户端的连接。清除会话(Clean Session)为false时表示创建一个持久会话在客户端断开连接时会话仍然保持并保存离线消息直到会话超时注销。为true时表示创建一个新的临时会话在客户端断开时会话自动销毁。持久会话避免了客户端掉线重连后消息的丢失并且免去了客户端连接后重复的订阅开销。这一功能在带宽小网络不稳定的物联网场景中非常实用。服务器为持久会话保存的消息数量取决于服务器的配置比如 EMQ 提供的免费的公共MQTT服务器设置的离线消息保存时间为 5 分钟最大消息数为 1000 条且不保存 QoS 0 消息。注意持久会话恢复的前提是客户端使用固定的 Client ID 再次连接如果 Client ID 是动态的那么连接成功后将会创建一个新的持久会话。遗嘱消息(Last Will)遗嘱消息是 MQTT 为那些可能出现意外断线的设备提供的将遗嘱优雅地发送给其他客户端的能力。设置了遗嘱消息的 MQTT 客户端异常下线时MQTT 服务器会发布该客户端设置的遗嘱消息。意外断线包括因网络故障连接被服务端关闭设备意外掉电设备尝试进行不被允许的操作而被服务端关闭连接等。遗嘱消息可以看作是一个简化版的 MQTT 消息它也包含 Topic、Payload、QoS、Retain 等信息。当设备意外断线时遗嘱消息将被发送至遗嘱 Topic遗嘱 Payload 是待发送的消息内容遗嘱 QoS 与普通 MQTT 消息的 QoS 一致遗嘱 Retain 为true时表明遗嘱消息是保留消息。MQTT 服务器会为每个主题存储最新一条保留消息以方便消息发布后才上线的客户端在订阅主题时仍可以接收到该消息。协议版本使用较多的 MQTT 协议版本有 MQTT v3.1、MQTT v3.1.1 及 MQTT v5.0。目前MQTT 5.0 已成为绝大多数物联网企业的首选协议我们建议初次接触 MQTT 的开发者直接使用该版本。MQTT5.0新增连接参数Clean Start Session Expiry IntervalMQTT 5.0 中将 Clean Session 拆分成了 Clean Start 与 Session Expiry Interval。Clean Start 用于指定连接时是创建一个全新的会话还是尝试复用一个已存在的会话。为true时表示必须丢弃任何已存在的会话并创建一个全新的会话为false时表示必须使用与 Client ID 关联的会话来恢复与客户端的通信除非会话不存在。Session Expiry Interval 用于指定网络连接断开后会话的过期时间。设置为 0 或未设置表示断开连接时会话即到期设置为大于 0 的数值则表示会话在网络连接关闭后会保持多少秒设置为 0xFFFFFFFF 表示会话永远不会过期。连接属性(Connect Properties)MQTT 5.0 还新引入了连接属性的概念进一步增强了协议的可扩展性。如何建立一个安全的MQTT连接虽然 MQTT 协议提供了用户名、密码、Client ID 等认证机制但是这对于物联网安全来说还远远不够。基于传统的 TCP 通信使用明文传输信息的安全性很难得到保证数据也会存在被窃听、篡改、伪造、冒充的风险。SSL/TLS 的出现很好的解决了通信中的风险问题其以非对称加密技术为主干混合了不同模式的加密方式既保证了通信中消息都以密文传输避免了被窃听的风险同时也通过签名防止了消息被篡改。不同 MQTT 服务器启用 SSL/TLS 的步骤都各有不同EMQX 内置了对 TLS/SSL 的支持包括支持单/双向认证、X.509 证书、负载均衡 SSL 等多种安全认证。单向认证是一种仅通过验证服务器证书来建立安全通信的方式它能保证通信是加密的但是不能验证客户端的真伪通常需要与用户名、密码、Client ID 等认证机制结合。双向认证是指在进行通信认证时要求服务端和客户端都提供证书双方都需要进行身份认证以确保通信中涉及的双方都是受信任的。 双方彼此共享其公共证书然后基于该证书执行验证、确认。一些对安全性要求较高的应用场景就需要开启双向 SSL/TLS 认证。
http://www.gsyq.cn/news/1360147.html

相关文章:

  • 如何在Windows任务栏实时监控硬件性能?TrafficMonitor硬件监控插件完整指南
  • 通用业务智能体OpenClaw+Skills+RAG+Agent构建案例实操
  • 终极BepInEx指南:5分钟掌握游戏模组开发完整流程
  • Windows 10 启用 WSL / 虚拟机平台失败,DISM 0x800f081f,通过 ISO 修复安装解决
  • 2026年,探寻靠谱体育器材的终极指南
  • 不只卖设备!山东爱耳可视采耳全套方案助力从业者
  • DaVinci Resolve 19 好莱坞同款利器,玩转影视全流程制作
  • 不止于看见,更在于改变——双碳传媒的全球工业服务生态
  • 5步搞定ARM设备多系统启动:Ventoy终极指南
  • douyin-downloader 技术深度解析:抖音批量下载工具架构设计与实战指南
  • 抖音数据流捕获系统:构建专业级内容管理平台的7大核心技术
  • AI搜索时代品牌可见度提升:GEO优化与大模型优先推荐机制解析
  • FFXIV国际服汉化终极指南:3步实现中文界面完整教程
  • AI API Token 管理实践:几个真实场景里的成本优化思路
  • 提取html到markdown
  • 警惕AI新型诈骗,筑牢全民反诈安全防线
  • 08 Chroma_性能调优、扩展性与选型避坑
  • 豆包获客讲师:深度专业评估与独家解析
  • ClassIn 在 Linux 下无法播放音频
  • Gopher360:三步实现游戏手柄控制电脑的终极指南
  • HsMod深度解析:基于BepInEx的炉石传说全方位模改进阶指南
  • 2026适合小白的高还原度PDF转长图工具推荐合集 - 时讯资讯
  • 西恩士液冷板清洁度检测设备方案提供:不只是卖设备,更是交付能力 - 工业设备研究社
  • 宝塔域名已经添加了,但ssl里面没有
  • 《男人来自火星,女人来自金星4:生活篇》第4-6章深度解读:血清素、内啡肽与爱的荷尔蒙
  • Campus-Imaotai终极指南:Java自动化茅台预约系统完整部署教程
  • 嘎嘎降AI和PaperRR哪个更适合SCI论文:2026年SCI投稿降AI工具完整横评报告
  • 可酷实现 AI 智能音乐关键技术突破,推动音乐行业迈入智能化新阶段
  • 生产环境的“后悔药”:如何利用 Dify 版本控制与回滚机制建立 AI 应用的 CI/CD 闭环?
  • 头歌数据分析与数据挖掘——神经网络