import mqtt from 'mqtt'; // 全局变量 let client= { instance : null, connected: false } ; /** * 初始化MQTT连接(无Promise,纯回调) * @param {Object} config 连接配置 {host, port, username, password, clientId, isSSL, keepalive, clean} * @param {Array} subs 订阅主题列表 [{topic: 'xxx', qos: 0}] */ export function initMQTT(config, subs = []) { // 1. 已有连接:直接回调成功 if (client.instance && client.instance.connected) { return client; } const options = { clientId: 'uniapp_mqtt_' + Math.random().toString(16).substr(2, 8), username: config.username, password: config.password, clean: true, connectTimeout: 4000, reconnectPeriod: 1000 } // 5. 构建连接参数 const protocol = config.protocol || (config.isSSL ? 'wss' : 'ws'); const url = `${protocol}://${config.host}:${config.port}/mqtt` client.instance = mqtt.connect(url, options) client.instance.on('connect', () => { client.connected = true client.instance.subscribe(subs, {qos: 0}) console.info('已连接到MQTT服务器') console.info(client.instance) }) client.instance.on('close', () => { console.info('连接已关闭') client.connected = false console.info(client.instance) }) } /** * 断开MQTT连接(无Promise,纯回调) * @param {Function} onComplete 完成回调 () => {} */ export function disconnectMQTT() { if (client.instance && client.connected) { client.instance.end() client.connected = false console.info('已断开MQTT连接') } } /** * 获取MQTT客户端实例 * @returns {Client} MQTT客户端 */ export function getMQTTClientInstance() { return client.instance; } /** * 获取MQTT连接状态 * @returns {Object} {isConnected: Boolean, isConnecting: Boolean} */ export function getMQTTStatus() { return { isConnected: !!client && client.connected, }; }