简说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 可退出并关闭连接

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值