Files
HarmonyOS--waterapp/mqtt-backend/server.js
T
2026-07-13 12:06:16 +08:00

92 lines
2.6 KiB
JavaScript

/**
* MQTT Broker 服务器
* 使用 aedes 并配置协议兼容性
*/
const aedes = require('aedes')({
// 兼容所有MQTT协议版本
protocolVersion: 4 // 支持 MQTT 5.0,向下兼容 3.1.1 和 3.1
});
const net = require('net');
// 配置参数
const PORT = 1883;
const HOST = '0.0.0.0';
// 简化认证 - 允许所有连接(测试用)
aedes.authenticate = (client, username, password, callback) => {
console.log(`[认证请求] 客户端: ${client.id}, 用户名: ${username || '无'}`);
console.log(`[协议版本] ${client.version}`);
// 测试阶段:允许所有连接
callback(null, true);
};
// 客户端连接事件
aedes.on('client', (client) => {
console.log(`[客户端连接] ${client.id} 已连接`);
console.log(`[当前连接数] ${aedes.connectedClients}`);
});
// 客户端断开事件
aedes.on('clientDisconnect', (client) => {
console.log(`[客户端断开] ${client.id} 已断开`);
});
// 消息发布事件
aedes.on('publish', (packet, client) => {
if (client) {
const payload = packet.payload.toString();
console.log(`[消息发布] 主题: ${packet.topic}`);
console.log(`[发布者] ${client.id}`);
console.log(`[消息内容] ${payload}`);
try {
const data = JSON.parse(payload);
console.log(`[水质数据] 温度:${data.temp}°C, pH:${data.ph}, COD:${data.cod}`);
} catch (e) {}
console.log('---');
}
});
// 订阅事件
aedes.on('subscribe', (subscriptions, client) => {
console.log(`[订阅] 客户端 ${client.id} 订阅了:`);
subscriptions.forEach(sub => {
console.log(` - 主题: ${sub.topic}`);
});
});
// 创建TCP服务器
const server = net.createServer(aedes.handle);
// 启动服务器
server.listen(PORT, HOST, () => {
console.log('========================================');
console.log(' MQTT Broker 服务器已启动');
console.log('========================================');
console.log(`监听地址: mqtt://${HOST}:${PORT}`);
console.log(`支持协议: MQTT 3.1 / 3.1.1 / 5.0`);
console.log('----------------------------------------');
console.log('MQTTX / HarmonyOS 连接配置:');
console.log(' - 主机: 192.168.128.190');
console.log(' - 端口: 1883');
console.log(' - 用户名: admin (可选)');
console.log(' - 密码: admin (可选)');
console.log(' - 发布主题: sea_status');
console.log('========================================');
});
server.on('error', (err) => {
console.error('服务器错误:', err);
process.exit(1);
});
process.on('SIGINT', () => {
console.log('\n正在关闭...');
aedes.close(() => {
server.close();
process.exit(0);
});
});