| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849 |
- const mqtt = require('mqtt');
- const logger = require('./logger');
- const mqttBroker = 'mqtt://192.168.3.31';
- const mqttUser = 'yangfei';
- const mqttPassword = 'yangfei';
- const client = mqtt.connect(mqttBroker, {
- username: mqttUser,
- password: mqttPassword,
- clientId: '后台服务员', // 设置客户端 ID
- // clientId: `backend_${Date.now()}`, // 使用时间戳生成唯一客户端ID
- clean: true, // 清除会话
- reconnectPeriod: 5000, // 5秒重连间隔
- connectTimeout: 30000, // 30秒连接超时
- keepalive: 60 // 60秒心跳
- });
- client.on('connect', () => {
- if (!client.connected) {
- logger.info('后台管理员上线');
- }
- logger.info('MQTT 连接成功');
- });
- client.on('reconnect', () => {
- logger.info('正在尝试重新连接 MQTT 代理...');
- });
- client.on('close', () => {
- logger.warn('MQTT 连接已断开');
- });
- client.on('error', (err) => {
- logger.error('MQTT 连接失败:', err.message);
- // 尝试重新连接
- setTimeout(() => {
- client.reconnect();
- }, 5000);
- });
- client.on('offline', () => {
- logger.warn('MQTT 客户端已离线');
- });
- // 动态生成 relayTopic
- const getRelayTopic = (deviceId) => `device/${deviceId}/relay/control`;
- module.exports = { client, getRelayTopic };
|