92 lines
2.6 KiB
JavaScript
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);
|
|
});
|
|
}); |