mqttClient.js 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. const mqtt = require('mqtt');
  2. const logger = require('./logger');
  3. const mqttBroker = 'mqtt://192.168.3.31';
  4. const mqttUser = 'yangfei';
  5. const mqttPassword = 'yangfei';
  6. const client = mqtt.connect(mqttBroker, {
  7. username: mqttUser,
  8. password: mqttPassword,
  9. clientId: '后台服务员', // 设置客户端 ID
  10. // clientId: `backend_${Date.now()}`, // 使用时间戳生成唯一客户端ID
  11. clean: true, // 清除会话
  12. reconnectPeriod: 5000, // 5秒重连间隔
  13. connectTimeout: 30000, // 30秒连接超时
  14. keepalive: 60 // 60秒心跳
  15. });
  16. client.on('connect', () => {
  17. if (!client.connected) {
  18. logger.info('后台管理员上线');
  19. }
  20. logger.info('MQTT 连接成功');
  21. });
  22. client.on('reconnect', () => {
  23. logger.info('正在尝试重新连接 MQTT 代理...');
  24. });
  25. client.on('close', () => {
  26. logger.warn('MQTT 连接已断开');
  27. });
  28. client.on('error', (err) => {
  29. logger.error('MQTT 连接失败:', err.message);
  30. // 尝试重新连接
  31. setTimeout(() => {
  32. client.reconnect();
  33. }, 5000);
  34. });
  35. client.on('offline', () => {
  36. logger.warn('MQTT 客户端已离线');
  37. });
  38. // 动态生成 relayTopic
  39. const getRelayTopic = (deviceId) => `device/${deviceId}/relay/control`;
  40. module.exports = { client, getRelayTopic };