logo
2
4
WeChat Login

SyncPulse

多人心率监测 WebSocket 实时同步服务。支持设备端上报心率数据,大屏监控端实时展示多人心率快照与历史统计。

功能特性

  • 实时同步:基于 WebSocket 的低延迟心率数据广播
  • 多房间支持:通过 roomId 隔离不同会话的数据
  • 蓝牙心率带:通过 Web Bluetooth API 连接蓝牙心率传感器,实时采集心率
  • 大屏监控:内置 Dashboard 视图,实时展示所有在线设备心率与趋势图表
  • 历史记录:支持 API 查询历史心率数据和统计信息
  • 自动清理:超时房间数据自动过期(默认 6 小时)

项目结构

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

快速开始

环境要求

  • Node.js >= 18
  • npm >= 9

本地安装

# 克隆项目 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 部署

# 运行容器 docker run -d \ --name syncpulse \ -p 3000:3000 \ --restart unless-stopped \ docker.cnb.cool/anyexyz/syncpulse:latest

Docker Compose 部署

services: syncpulse: ports: - "3000:3000" restart: unless-stopped image: docker.cnb.cool/anyexyz/syncpulse:latest

配置选项

所有配置通过环境变量设置:

变量默认值说明
PORT3000服务监听端口
MAX_ROOM_AGE_HOURS6房间历史数据保留时长(小时)
AGGREGATOR_INTERVAL_MS500心率快照聚合推送间隔(毫秒)

API 接口

获取房间历史记录

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 } } }

WebSocket 协议

客户端 → 服务端

类型字段说明
join_roomroomId, userId, userName, deviceName, userColor, role加入房间(role: device / dashboard)
heart_ratebpm, userId, userName, deviceName上报心率数据
device_disconnecteduserId设备断开通知

服务端 → 客户端

类型说明
room_state加入房间后返回当前在线设备列表
user_joined新设备加入房间广播
user_left设备离开房间广播
device_disconnected设备断开连接广播
heartbeat_snapshot定时聚合的心率快照(仅 dashboard 接收)
history_batch历史记录批量推送(dashboard 加入时)

贡献规范

  1. Fork 本仓库
  2. 创建特性分支:git checkout -b feature/my-feature
  3. 提交更改:git commit -m 'Add some feature'
  4. 推送分支:git push origin feature/my-feature
  5. 提交 Pull Request

代码规范

  • 遵循现有代码风格
  • 模块职责单一,避免循环依赖
  • 新功能需在对应模块中实现,入口文件保持精简

常见问题

Q: 数据是否会持久化?

A: 当前版本所有数据存储在内存中,服务重启后数据会丢失。房间记录默认保留 6 小时后自动清理。如需持久化,建议自行接入数据库。

Q: 如何修改端口?

A: 通过环境变量 PORT 设置。Docker 部署时通过 -e PORT=8080 传入。

Q: Dashboard 页面无法接收数据?

A: 请确认 Dashboard 加入房间时 role 字段设置为 dashboard,且 roomId 与设备端一致。

License

MIT License

About

No description, topics, or website provided.
576.00 KiB
2 forks4 stars2 branches6 TagREADMEMIT license

Sponsor

Language
HTML87%
JavaScript12.4%
Dockerfile0.6%