MQTT

定义

MQTT是运行在TCP之上的轻量级应用层协议,专门为物联网,和低带宽弱网设备设计。

架构:发布 / 订阅(Pub/Sub),客户端之间不直连,由 Broker(服务端)中转消息

核心角色

Broker:MQTT 服务器(EMQX、Mosquitto、MQTTnet.Server)

Publisher:发布消息的设备 / 程序

Subscriber:订阅主题、接收消息的设备 / 程序

核心特性

a.Topic 主题路由 
分层字符串 sensor/temp/001,支持通配符 +(单层)、#(多层结尾)

Topic 就是 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 操作:
  1. 电脑 A 安装 EMQX,IP:192.168.1.10
  2. 所有硬件设备配置 Broker 地址 = 192.168.1.10:1883
  3. 你的 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、查看在线设备
posted @ 2026-07-17 21:50  HelloWorld庄先生  阅读(5)  评论(0)    收藏  举报