我们使用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}`);
});
答案 0 :(得分:2)
为什么每个客户端在连接/断开连接时不仅仅发布自己的消息。
这使您可以精确控制消息中的内容。
您可以在告知客户端断开连接之前发送断开连接消息。
如果由于崩溃/网络故障而断开连接,您还可以利用《最后的遗嘱》让经纪人代表客户发布消息(在KeepAlive到期之后)。
该技术适用于任何浏览器。