【发布时间】:2019-08-06 06:50:30
【问题描述】:
我们使用 node 作为服务器,使用 mqtt 作为库。
我们安装了 mosquitto 作为网络套接字的代理。
现在我们必须跟踪新客户端连接和断开连接的记录,但问题是我们无法获取任何事件。
那么有什么办法可以做到这一点吗?
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}`);
});
【问题讨论】:
-
所以一切正常,但您没有得到在
connect事件中实现的日志消息? (我在示例代码中没有看到disconnect) -
不,我想在其他客户端连接或断开连接时获取事件。
-
该数据仅对代理(您连接到的服务器)可用,而不是对发布者/订阅者(您发布的代码)可用。例如,使用 mosca 您会在
clientConnected事件中获得该事件。 -
您能描述一下我们如何使用 mosca 吗?
-
网络上有tutorials,但让您的经纪人也增加了额外的工作和维护。使用@hardillb 解决方案,您可以获得
connect信息,如果经纪人在您的控制之下或代表客户发布disconnect信息(如果不要求),您可以获得disconnect信息。