这是一个用于物联网设备通信的桥接服务,实现了MQTT和UDP协议到WebSocket的转换。该服务允许设备通过MQTT协议进行控制消息传输,同时通过UDP协议高效传输音频数据,并将这些数据桥接到WebSocket服务。
- 多协议支持: 同时支持MQTT、UDP和WebSocket协议
- 音频数据传输: 专为音频数据流优化的传输机制
- 加密通信: 使用AES-128-CTR加密UDP数据传输
- 会话管理: 完整的设备会话生命周期管理
- 自动重连: 连接断开时自动重连机制
- 心跳检测: 定期检查连接活跃状态
- 开发/生产环境配置: 支持不同环境的配置切换
- MQTT服务器: 处理设备控制消息
- UDP服务器: 处理高效的音频数据传输
- WebSocket客户端: 连接到聊天服务器
- 桥接层: 在不同协议间转换和路由消息
├── app.js # 主应用入口
├── mqtt-protocol.js # MQTT协议实现
├── ecosystem.config.js # PM2配置文件
├── package.json # 项目依赖
├── .env # 环境变量配置
├── utils/
│ ├── config-manager.js # 配置管理工具
│ ├── mqtt_config_v2.js # MQTT配置验证工具
│ └── weixinAlert.js # 微信告警工具
└── config/ # 配置文件目录
- debug: 调试日志输出
- dotenv: 环境变量管理
- ws: WebSocket客户端
- events: Node.js 事件模块
- Node.js 14.x 或更高版本
- npm 或 yarn 包管理器
- PM2 (用于生产环境部署)
- 克隆仓库
git clone <仓库地址>
cd mqtt-websocket-bridge- 安装依赖
npm install- 创建配置文件
mkdir -p config
cp config/mqtt.json.example config/mqtt.json- 编辑配置文件
config/mqtt.json,设置适当的参数
配置文件 config/mqtt.json 需要包含以下内容:
{
"debug": false,
"development": {
"mac_addresss": ["aa:bb:cc:dd:ee:ff"],
"chat_servers": ["wss://dev-chat-server.example.com/ws"]
},
"production": {
"chat_servers": ["wss://chat-server.example.com/ws"]
}
}创建 .env 文件并设置以下环境变量:
MQTT_PORT=1883 # MQTT服务器端口
UDP_PORT=8884 # UDP服务器端口
PUBLIC_IP=your-ip # 服务器公网IP
# 直接运行
node app.js
# 调试模式运行
DEBUG=mqtt-server node app.js# 安装PM2
npm install -g pm2
# 启动服务
pm2 start ecosystem.config.js
# 查看日志
pm2 logs xz-mqtt
# 监控服务
pm2 monit服务将在以下端口启动:
- MQTT 服务器: 端口 1883 (可通过环境变量修改)
- UDP 服务器: 端口 8884 (可通过环境变量修改)
- 设备通过MQTT协议连接到服务器
- 设备发送
hello消息,包含音频参数和特性 - 服务器创建WebSocket连接到聊天服务器
- 服务器返回UDP连接参数给设备
- 设备通过UDP发送音频数据
- 服务器将音频数据转发到WebSocket
- WebSocket返回的控制消息通过MQTT发送给设备
{
"type": "hello",
"version": 3,
"audio_params": { ... },
"features": { ... }
}{
"type": "hello",
"version": 3,
"session_id": "uuid",
"transport": "udp",
"udp": {
"server": "server-ip",
"port": 8884,
"encryption": "aes-128-ctr",
"key": "hex-encoded-key",
"nonce": "hex-encoded-nonce"
},
"audio_params": { ... }
}- UDP通信使用AES-128-CTR加密
- 每个会话使用唯一的加密密钥
- 使用序列号防止重放攻击
- 设备通过MAC地址进行身份验证
- 支持设备分组和UUID验证
- 使用预分配的缓冲区减少内存分配
- UDP协议用于高效传输音频数据
- 定期清理不活跃的连接
- 连接数和活跃连接数监控
- 支持多聊天服务器负载均衡
- 检查设备MAC地址格式是否正确
- 确保UDP端口在防火墙中开放
- 启用调试模式查看详细日志
- 检查配置文件中的聊天服务器地址是否正确
- 验证设备认证信息是否正确
- 修改
mqtt-protocol.js以支持新的MQTT功能 - 在
MQTTConnection类中添加新的消息处理方法 - 更新配置管理器以支持新的配置选项
- 在
WebSocketBridge类中添加新的WebSocket处理逻辑
# 启用所有调试输出
DEBUG=* node app.js
# 只启用MQTT服务器调试
DEBUG=mqtt-server node app.js