本仓库用于 NeriPlayer 中的“一起听”相关功能的独立服务端仓库。
- 创建房间 / 加入房间
- WebSocket 实时同步
- 房主 / 听众权限控制
- 房主离线检测与自动关房
- 房间状态持久化
- 支持 Deploy to Cloudflare 一键部署
.
├─ src/
│ └─ worker.js # Worker 入口 + ListeningRoomDO
├─ .dev.vars.example # 本地开发与 Deploy to Cloudflare 所需示例密钥
├─ .gitignore
├─ package.json
├─ README.md
└─ wrangler.toml # Durable Object 绑定与迁移配置
POST /api/rooms:创建房间POST /api/rooms/:roomId/join:加入房间GET /api/rooms/:roomId/state:获取房间快照POST /api/rooms/:roomId/control:通过 Bearer Token 提交控制事件GET /api/rooms/:roomId/ws?token=...:建立 WebSocketGET /healthz:健康检查
- 房主控制:
PLAY/PAUSE/SEEK/SET_TRACK/SET_QUEUE/HEARTBEAT - 听众请求:
REQUEST_PLAY/REQUEST_PAUSE/REQUEST_SEEK/REQUEST_SET_TRACK - 其他能力:
REQUEST_LINK/LINK_READY/UPDATE_SETTINGS
- 每个房间一个
ListeningRoomDO - Durable Object storage 持久化房间快照
- HMAC Token 鉴权
- WebSocket hibernation 降低常驻开销
- 房主心跳超时后自动标记离线,超出宽限期自动关闭房间
- Node.js
>= 20 - Cloudflare 账号
npx wrangler loginnpx wrangler secret put LISTEN_TOGETHER_TOKEN_SECRETnpm run deploy部署完成后,Wrangler 会输出对应的 *.workers.dev 地址。