MQTT
定义
MQTT是运行在TCP之上的轻量级应用层协议,专门为物联网,和低带宽弱网设备设计。
架构:发布 / 订阅(Pub/Sub),客户端之间不直连,由 Broker(服务端)中转消息
核心角色
Broker:MQTT 服务器(EMQX、Mosquitto、MQTTnet.Server)
Publisher:发布消息的设备 / 程序
Subscriber:订阅主题、接收消息的设备 / 程序
核心特性
a.Topic 主题路由
分层字符串 sensor/temp/001,支持通配符 +(单层)、#(多层结尾)
Topic 就是 MQTT 里消息的地址 / 频道名称,作用是区分不同类型的数据,实现消息精准分发。
MQTT 是「发布 - 订阅」模型:
MQTT 是「发布 - 订阅」模型:
- 客户端发布消息时,必须指定一个 Topic(相当于快递收件地址);
- 客户端订阅时,填写需要监听的 Topic;
- Broker(MQTT 服务端)只把消息推送给订阅了对应 Topic的客户端,不会乱发。
b.3 档 QoS 消息可靠性
QoS(Quality of Service,服务质量)定义了发布者 → Broker → 订阅者整条链路消息送达保障规则,只影响消息投递可靠性,和 TCP 底层可靠传输不是一回事。
QoS0:最多一次,发完即丢,适合传感器高频上报
QoS1:至少一次,带 ACK 确认,最常用
QoS2:恰好一次,无重复,适合控制指令、支付
| QoS 等级 | 名称 | 丢失风险 | 重复风险 | 网络开销 | 典型用途 |
|---|---|---|---|---|---|
| 0 | AtMostOnce 最多一次 | 高(可能丢) | 无 | 极小 | 高频传感器实时数据 |
| 1 | AtLeastOnce 至少一次 | 无 | 可能重复 | 中等 | 常规设备上报、状态推送 |
| 2 | ExactlyOnce 恰好一次 | 无 | 无 | 最大 | 控制指令、交易、计费 |
c.遗嘱消息 Will
客户端异常掉线(断电、断网)时,Broker 自动向指定主题推送离线通知
d.保活心跳 KeepAlive
定时发送心跳包,超时 Broker 判定设备离线
e.保留消息 Retain
Broker 缓存最新一条消息,新订阅客户端上线立刻收到最新状态
MQTT和TCP的区别
1.TCP:传输层裸字节流,无消息边界,需要手动处理粘包;点对点通信,无分发能力
2.MQTT:应用层协议,自带完整消息封装、主题分发、离线 / 重连 / 遗嘱等物联网能力,底层依赖 TCP。
不用必须自己开发 Broker,分 4 种方案,按你的场景选
方案 1:直接用现成开源 Broker(90% 项目首选,不用写一行服务代码)
1. EMQX(工业物联网最推荐,Windows 一键安装)
- 下载后双击安装,启动自动监听 1883 端口,开箱即用
- 支持百万设备、Web 管理后台、账号权限、TLS 加密、规则引擎
- 局域网设备 / 电脑都连本机 EMQX Broker,适合车间、本地调试
2. Mosquitto(轻量小巧,适合低配电脑 / 单片机)
- 体积小、占用资源极低,Windows/Linux 都有绿色版
- 适合本地调试、小型项目,功能基础够用
3. 云厂商公共免费 Broker(纯调试测试,不用本地装软件)
broker.emqx.io:1883,无账号密码,外网直接连
4. MQTTnet.Server(C# 自建 Broker,你说的 “自己开发 Broker”)
就是用 MQTTnet 库写服务端,优点是和你的 WPF 项目同语言、可嵌入程序;缺点需要自己处理端口、鉴权、稳定性,适合需要 Broker 和上位机集成在同一个 exe 的场景。
场景 A:本地局域网调试、车间上位机监控硬件(推荐 EMQX/Mosquitto 现成服务)
✅ 不需要自己开发 Broker 操作:
- 电脑 A 安装 EMQX,IP:192.168.1.10
- 所有硬件设备配置 Broker 地址 = 192.168.1.10:1883
- 你的 WPF 客户端同样连接 192.168.1.10:1883
设备和上位机通过 EMQX 中转消息,全程不用写 Broker 服务代码。
端口选用场景速查表
| 端口 | 协议类型 | 使用场景 |
|---|---|---|
| 1883 | MQTT TCP 明文 | 局域网本地调试、内网工控、车间设备 |
| 8883 | MQTT TCP TLS 加密 | 公网外网设备、线上生产项目(推荐) |
| 8083 | WebSocket MQTT 明文 | 本地网页前端调试 |
| 8084 | WebSocket MQTT TLS 加密 | 线上网页监控页面 |
| 18083 | EMQX 管理后台 HTTP | 浏览器配置 Broker、查看在线设备 |
浙公网安备 33010602011771号