MQTTX测试即时通讯

401 阅读2分钟

1. 安装 MQTTX,用于测试通讯

下载地址

在线地址

2. 安装MQTT Broker(我用的Mosquitto),用于消息代理,承担消息路由和分发的任务

  1. 安装:Mosquitto下载地址,下载好直接安装就好了
  2. 配置:找到安装目录如:C:\Program Files\mosquitto下面的mosquitto.conf这个文件,打开加入配置allow_anonymous true,表示允许匿名访问(因为没有配置用户名和密码,如果不允许匿名访问,会出现权限错误如:连接MQTTX报错Error: Connection refused: Not authorized
  3. 启动: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
  1. 新建MQTTX连接(连接## MQTT Broker)

企业微信截图_17084179164434.png

没有配置端口,默认端口是1883,服务器地址就是本地:127.0.0.1

企业微信截图_17084182943930.png

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,实现通讯测试