1. 安装 MQTTX,用于测试通讯
2. 安装MQTT Broker(我用的Mosquitto),用于消息代理,承担消息路由和分发的任务
- 安装:Mosquitto下载地址,下载好直接安装就好了
- 配置:找到安装目录如:C:\Program Files\mosquitto下面的mosquitto.conf这个文件,打开加入配置
allow_anonymous true,表示允许匿名访问(因为没有配置用户名和密码,如果不允许匿名访问,会出现权限错误如:连接MQTTX报错Error: Connection refused: Not authorized) - 启动:net start mosquitto(以管理员身份运行,否则会报错,状态如下)
SERVICE_NAME: mosquitto
类型:10 win32_own_process
状态:1停止
WIN32_EXIT_CODE: 1077 (0x435)
SERVICE_EXIT_CODE: 0 (0x0)
检查点:0x0
WAIT_HINT: 0x0
- 新建MQTTX连接(连接## MQTT Broker)
没有配置端口,默认端口是1883,服务器地址就是本地:127.0.0.1
3. 代码编写
index.js
// MQTT Broker配置
const brokerUrl = 'mqtt://127.0.0.1:1883'; // broker地址和端口,我是本地的,就是这个
const clientId = 'mqttx_0cd5f07a'; // 客户端ID,可以自定义
// 创建MQTT客户端实例
const client = mqtt.connect(brokerUrl, {
connectTimeout: 40000,
clientId: clientId,
clean: true
});
// 连接成功后的回调函数
client.on('connect', () => {
console.log(`客户端${clientId}已连接到MQTT Broker`);
// 订阅主题
const subscribeTopic = 'topic1';
client.subscribe(subscribeTopic, (err) => {
if (!err) {
console.log(`已订阅主题:${subscribeTopic}`);
} else {
console.error('订阅主题时发生错误:', err);
}
});
// 发布消息
const publishTopic = 'topic1';
const message = 'Hello from Node.js MQTT Client!';
client.publish(publishTopic, message, { qos: 0 }, (err) => {
if (!err) {
console.log(`已向主题${publishTopic}发送消息:${message}`);
} else {
console.error('发布消息时发生错误:', err);
}
});
});
// 收到消息的回调函数
client.on('message', (topic, payload) => {
console.log(`从主题${topic}收到消息:`, payload.toString());
});
// 断开连接事件处理
client.on('disconnect', () => {
console.log('与MQTT Broker断开连接');
});
// 错误处理
client.on('error', (err) => {
console.error('MQTT客户端发生错误:', err);
});
运行:node index.js
总结
程序相当于一个客户端硬件A,MQTTX相当于一个客户端硬件B,MQTT Broker是消息代理服务器,A发送的消息被MQTT Broker分发给了B,B发送的消息通过MQTT Broker分发给A,实现了A和B的通信。也可以写两份代码,分别模拟客户端A和客户端B,实现通讯测试