一起听的成员控制开关、循环随机同步与房主离线恢复
成员控制开关
房间支持一个全局的「成员控制开关」:
- 开启:听众可以发起暂停、切歌、模式切换等请求,房主会收到确认提示
- 关闭:只有房主能控制,听众被动跟随
自动暂停行为
| 场景 | 行为 |
|---|---|
| 成员加入房间 | 可配置是否自动暂停(房主决定) |
| 成员显式离开 | 可配置是否自动暂停 |
| 同一成员重连 | 不会触发成员变更暂停(已识别是重连) |
房主和听众都会定期保活连接,避免因为网络抖动被误判为离线。
循环/随机模式同步
- 房主的循环/随机模式会实时同步到所有听众
- 随机模式:房主发起时生成的真实乱序队列会被提交并复用,听众拿到相同的队列顺序
- 关闭随机后恢复顺序播放
- 队列拖动、添加和删除以版本化操作合并——双方同时操作时保留可重放的意图,纯重排不会重载当前歌曲
房主离线恢复
房主离线后,房间的播放状态由 Cloudflare Durable Objects 持久化。房主重新上线后会从 Durable Object 恢复房间状态,继续播放。
时钟偏移校正
客户端会估算服务端时钟偏移,按漂移阈值校正进度。这是为了补偿 WebSocket 传输延迟,让房主和听众的播放位置在物理时间上对齐。
版本门控更新
服务端使用版本号做门控——只有客户端版本满足条件的成员才会收到新的控制指令,避免新旧版本客户端在同一会话里互相干扰。