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

简说MQTT

🌟 对比一下 MQTT 的 TCP 与 WebSocket,以及推荐一些常用的免费 Broker!


🚀 MQTT 的 TCP 与 WebSocket 对比

特性TCP (1883 / 8883)WebSocket (8000 / 8083 / wss)
📦 底层协议直接 TCP / TLSWebSocket(基于 HTTP 升级的持久连接)
🌐 用途适合嵌入式设备、物联网、后端服务适合浏览器、网页应用、受限网络
🔒 安全性用 TLS (8883) 加密用 WSS 加密
🔧 防火墙穿透有时受限(1883/8883 可能被封)容易穿透(因为走 HTTP(S) 端口)
📡 延迟最低延迟略高(WebSocket 握手需要 HTTP 升级)
🤖 客户端支持嵌入式、后端、手机、PC、MQTT 客户端浏览器(JS),也支持后端和手机
部署复杂度简单(直接开端口)稍复杂(需配置 WebSocket 服务或反向代理)

🌐 什么时候用 TCP?

✅ 物联网设备(ESP32、树莓派等)
✅ 后台服务通信
✅ 对延迟特别敏感的应用

🌐 什么时候用 WebSocket?

✅ 需要在浏览器里直接用 MQTT 的场景
✅ 前端 H5、大屏可视化、Web 控制台
✅ 客户端在受限网络(公司/学校/运营商防火墙)


🌟 常用免费 MQTT Broker

BrokerTCPWebSocket网址备注
HiveMQ Public Broker✅ 1883✅ 8000 (ws) / 8884 (wss)HiveMQ稳定、官方提供在线 WebSocket 客户端
Eclipse Mosquitto 公共测试服务✅ 1883✅ 8080 (ws), 8081 (wss)Mosquitto免费测试,不保证持久可用
EMQX Public Broker✅ 1883✅ 8083 (ws), 8084 (wss)EMQX支持 MQTT 5.0 和 WebSocket
Adafruit IO (需注册)✅ 1883 (需要账号)✅ WSSAdafruit IO支持数据可视化,免费有数据量限制

🔑 重点总结

TCP:适合设备、后端、延迟敏感
WebSocket:适合浏览器、H5、跨防火墙场景

公共 broker 推荐用 HiveMQ 或 EMQX(比较稳定、支持 WebSocket)
✅ 免费 broker 公共 topic 数据是全网可见,别发敏感信息


💡 示例连接地址

BrokerTCP 地址WebSocket 地址
HiveMQbroker.hivemq.com:1883ws://broker.hivemq.com:8000/mqtt
EMQXbroker.emqx.io:1883ws://broker.emqx.io:8083/mqtt
Mosquittotest.mosquitto.org:1883ws://test.mosquitto.org:8080/mqtt

💡 在 Linux 下用 Bash 发一条 MQTT 消息测试 Broker,几种简单可靠的方法!


方法 1: 使用 mosquitto_pub

👉 如果你有安装 Mosquitto 客户端工具(推荐)

mosquitto_pub -h broker.hivemq.com -p 1883 -t "test/hello" -m "你好 MQTT!"

如果你用 WebSocket 端口(例如 broker.hivemq.com:8000),Mosquitto 客户端不支持直接用 WebSocket,只能用 TCP(1883 或其他端口)。


方法 2: 使用 websocat(支持 WebSocket)

👉 安装 websocat

sudo apt install websocat  # 有的系统可用
# 或下载二进制: https://github.com/vi/websocat/releases

👉 用 WebSocket 发 MQTT 帧(示例复杂,WebSocket 手工发 MQTT 帧不推荐)


方法 3: 使用 Node / Python 脚本(推荐 WebSocket)

如果你需要 WebSocket,可以用 Node.js 或 Python:

Node (mqtt.js)

npm install mqtt -g

然后:

node -e "
const mqtt = require('mqtt');
const client = mqtt.connect('ws://broker.hivemq.com:8000/mqtt');
client.on('connect', () => {client.publish('test/hello', '你好 MQTT!');client.end();
});
"

Python (paho-mqtt,走 TCP,不走 WebSocket)

pip install paho-mqtt
python3 -c "
import paho.mqtt.client as mqtt
client = mqtt.Client()
client.connect('broker.hivemq.com', 1883, 60)
client.publish('test/hello', '你好 MQTT!')
client.disconnect()
"

🌟 最简单的 Bash 命令

如果你走 TCP:

mosquitto_pub -h broker.hivemq.com -p 1883 -t "test/hello" -m "你好 MQTT!"

总结

工具是否支持 WebSocket适合用途
mosquitto_pub❌(仅 TCP/TLS)快速 MQTT 测试
websocat✅(支持 WebSocket,但需构造帧)调试 WebSocket
Node mqtt.jsWebSocket / TCP 都可
Python paho❌(仅 TCP/TLS)脚本式 MQTT 测试

下面用 Node.js mqtt.js 写的测试脚本,支持同时连接 TCP 和 WebSocket 两种协议的 MQTT Broker,发消息并订阅主题,方便快速测试。


// mqtt-test.js
const mqtt = require('mqtt');// 从命令行参数获取连接参数
// node mqtt-test.js tcp ws
const tcpBroker = 'mqtt://broker.hivemq.com:1883';
const wsBroker = 'ws://broker.hivemq.com:8000/mqtt';
const topic = 'test/hello';// 创建客户端,传入不同的 URL,mqtt.js 会自动识别 TCP 或 WS
const clients = {tcp: mqtt.connect(tcpBroker),ws: mqtt.connect(wsBroker),
};function setupClient(client, name) {client.on('connect', () => {console.log(`[${name}] 已连接`);client.subscribe(topic, (err) => {if (err) {console.error(`[${name}] 订阅失败:`, err.message);} else {console.log(`[${name}] 已订阅主题: ${topic}`);// 连接后发送测试消息client.publish(topic, `Hello MQTT from ${name} at ${new Date().toISOString()}`);}});});client.on('message', (t, message) => {console.log(`[${name}] 收到消息: [${t}] ${message.toString()}`);});client.on('error', (err) => {console.error(`[${name}] 错误:`, err.message);});client.on('close', () => {console.log(`[${name}] 连接关闭`);});
}console.log('启动 TCP 和 WebSocket MQTT 测试客户端');setupClient(clients.tcp, 'TCP');
setupClient(clients.ws, 'WebSocket');// 进程退出时断开连接
process.on('SIGINT', () => {console.log('断开所有连接...');clients.tcp.end();clients.ws.end();process.exit();
});

使用方法

  1. 确保你安装了 Node.js 和 mqtt.js:
npm install mqtt
  1. 保存上面代码为 mqtt-test.js

  2. 运行:

node mqtt-test.js

说明

  • 脚本会同时连接 HiveMQ 的 TCP 和 WebSocket Broker
  • 连接成功后自动订阅 test/hello 主题
  • 并发布一条带时间戳的测试消息
  • 收到消息时会打印出来
  • Ctrl+C 可退出并关闭连接

相关文章:

  • 【分布式理论】读确认数与写确认数:分布式一致性的核心概念
  • C# 将 Enum枚举转成List,并显示在下拉列表中
  • 如何开发HarmonyOS 5的分布式通信功能?
  • 动态ds-vnp之normal和shortcut两种方式配置案例
  • 【软考高级系统架构论文】论企业应用系统的分层架构风格
  • AWS RDS/Aurora 开启 Database Insights 高级模式全攻略
  • SQL Server基础语句2:表连接与集合操作、子查询与CET、高级查询
  • 【Qt开发】网络运用
  • GitHub OAuth 认证示例
  • Linux - 安装 git(sudo apt-get)
  • Vue 简写形式全解析:清晰记忆指南
  • 《map和set的使用介绍》
  • 八大架构宪法 - 技术使用指导说明文档
  • OBS --- 录像地址
  • Mac Parallels Desktop Kali 2025 代理设置
  • 区块链是什么
  • 学习C++、QT---02(创建第一个C++项目、命名空间的讲解)
  • Transformer:现代自然语言处理的革命性架构
  • Java大厂面试攻略:Spring Boot与微服务架构深度剖析
  • yolov11转ncnn
  • 个人网站设计论文一万字/怎么建网站
  • 建设部幼儿园网站首页/新闻发稿软文推广
  • 四川游戏seo整站优化/短链接生成
  • 西宁做网站的公司bj君博沟通/ip软件点击百度竞价推广
  • 学校网站首页模板/如何制作一个网页页面
  • 小网站怎么赚钱/企业营销策划方案