多人心率监测 WebSocket 实时同步服务。支持设备端上报心率数据,大屏监控端实时展示多人心率快照与历史统计。
syncpulse/ ├── src/ │ ├── index.js # 应用入口,启动 HTTP 与 WebSocket 服务 │ ├── config.js # 集中配置管理(支持环境变量覆盖) │ ├── routes/ │ │ └── http.js # HTTP 路由(静态页面 + REST API) │ ├── services/ │ │ └── room.js # 房间管理核心逻辑 │ └── ws/ │ └── handler.js # WebSocket 消息处理 ├── public/ │ └── index.html # 前端页面(设备端 + 监控面板) ├── .cnb.yml # CNB 云原生构建配置 ├── Dockerfile ├── .dockerignore ├── .gitignore ├── package.json └── README.md
# 克隆项目
git clone https://cnb.cool/Anyexyz/SyncPulse.git
cd syncpulse
# 安装依赖
npm install
# 启动开发服务器(支持热重载)
npm run dev
# 或生产模式启动
npm start
启动后访问:
| 页面 | 地址 |
|---|---|
| 主页面 | http://localhost:3000 |
项目配置了 CNB 云端开发环境,可直接在浏览器中打开 VS Code 进行开发,详见仓库 .cnb.yml 配置。
# 运行容器
docker run -d \
--name syncpulse \
-p 3000:3000 \
--restart unless-stopped \
docker.cnb.cool/anyexyz/syncpulse:latest
services:
syncpulse:
ports:
- "3000:3000"
restart: unless-stopped
image: docker.cnb.cool/anyexyz/syncpulse:latest
所有配置通过环境变量设置:
| 变量 | 默认值 | 说明 |
|---|---|---|
PORT | 3000 | 服务监听端口 |
MAX_ROOM_AGE_HOURS | 6 | 房间历史数据保留时长(小时) |
AGGREGATOR_INTERVAL_MS | 500 | 心率快照聚合推送间隔(毫秒) |
GET /api/history?roomId=<roomId>
响应示例:
{
"roomId": "room-abc",
"records": [
{ "userId": "u1", "userName": "Alice", "deviceName": "Apple Watch", "bpm": 72, "timestamp": 1714617600000 }
],
"count": 1
}
GET /api/history/stats?roomId=<roomId>
响应示例:
{
"roomId": "room-abc",
"totalRecords": 100,
"users": {
"u1": { "userName": "Alice", "count": 60, "minBpm": 62, "maxBpm": 95, "avgBpm": 74 }
}
}
| 类型 | 字段 | 说明 |
|---|---|---|
join_room | roomId, userId, userName, deviceName, userColor, role | 加入房间(role: device / dashboard) |
heart_rate | bpm, userId, userName, deviceName | 上报心率数据 |
device_disconnected | userId | 设备断开通知 |
| 类型 | 说明 |
|---|---|
room_state | 加入房间后返回当前在线设备列表 |
user_joined | 新设备加入房间广播 |
user_left | 设备离开房间广播 |
device_disconnected | 设备断开连接广播 |
heartbeat_snapshot | 定时聚合的心率快照(仅 dashboard 接收) |
history_batch | 历史记录批量推送(dashboard 加入时) |
git checkout -b feature/my-featuregit commit -m 'Add some feature'git push origin feature/my-featureA: 当前版本所有数据存储在内存中,服务重启后数据会丢失。房间记录默认保留 6 小时后自动清理。如需持久化,建议自行接入数据库。
A: 通过环境变量 PORT 设置。Docker 部署时通过 -e PORT=8080 传入。
A: 请确认 Dashboard 加入房间时 role 字段设置为 dashboard,且 roomId 与设备端一致。