新客户端连接和断开连接时,有什么方法可以接收事件?

时间:2019-08-06 06:50:30

标签: node.js mqtt mosquitto

我们使用node作为服务器,使用mqtt作为库。

我们安装了mosquitto作为Web套接字的代理。

现在我们必须跟踪新客户端连接和断开连接时的记录,但是问题是我们无法获得任何事件。

那么有什么办法可以做到这一点?

const mqttServer = require('mqtt');

const clientId = appName + "_" + moment().valueOf();
const conOptions = {
    clientId,
    username: mqtt.user,
    password: mqtt.pass,
    keepalive: 10,
    clean: false,
    rejectUnauthorized: false
};

const conUrl = mqtt.uri;
const mqttClient = mqttServer.connect(conUrl, conOptions);

mqttClient.on("error", (err) => {
    logger.error(`${chalk.red('✗')} MQTT Error : `, err);
});

mqttClient.on('offline', () => {
    logger.error(`${chalk.red('✗')} MQTT Offline`);
});

mqttClient.on('reconnect', () => {
    logger.error(`${chalk.red('✗')} MQTT Reconnect`);
});

mqttClient.on('connect', () => {
    logger.info(`${chalk.green('✓')} MQTT Connected with ClientID ${chalk.yellow(clientId)}`);
});

mqttClient.on('message', (topic, message) => {
    logger.error(`New message in MQTT : ${message.toString()} on ${topic}`);
});

1 个答案:

答案 0 :(得分:2)

为什么每个客户端在连接/断开连接时不仅仅发布自己的消息。

这使您可以精确控制消息中的内容。

您可以在告知客户端断开连接之前发送断开连接消息。

如果由于崩溃/网络故障而断开连接,您还可以利用《最后的遗嘱》让经纪人代表客户发布消息(在KeepAlive到期之后)。

该技术适用于任何浏览器。