-
released this
2026-09-17 01:30:42 +08:00 | 15 commits to main since this releaseOpenDance Studio -- Web 管理服务端 v0.7.1
契约补齐 + 文档补齐(《DSH 开发文档 v1.6》7.2)。本版不含运行时行为变更,
GET /health的version由web-server/package.json同源驱动,管理端左下角同步显示v0.7.1。一、契约
websocket-keypoints0.1.0 → 0.2.0(T-WEB-016)与 Android 端
T-AND-011「连接状态异常、频繁重连」的两端一起改配套。
按文档 §7.2,契约先在 Web 端修改并提升版本,再向另两端建迁移任务。完全向后兼容:子协议名
opendance.pose.v1与二进制帧version = 0x01均不变,
只新增可选控制字段与一种新控制类型;仅实现 v0.1.0 的一端仍可互通。章节 新增 为什么必须写进契约 1.1 保活 接收端必须声明 silentTimeoutMs与heartbeatIntervalMs,且心跳必须小于静默超时的一半客户端原先只能用 OkHttp 的协议层 ping,而它由底层库自动应答、不暴露给应用层,接收端根本看不到,无法续命 —— 这是"画面里没人就掉线、然后疯狂重连"的根因 3.1 hello.deviceId(该安装实例的稳定标识,不使用任何硬件序列号)没有它,一次闪断重连会被接收端显示成两台设备 3.2 / 3.3 welcome/config携带上述保活字段让客户端按服务端节奏保活,而不是各写一套魔数 3.6 应用层 ping/pong(回显sentAtMs,pong另带serverAtMs供算 RTT)协议层 ping 对应用层不可见,必须自定义 5 设备去重:同一 deviceId只保留最新连接,旧连接以1000关闭用 1000是刻意的:对端据 §7 不会重连,否则会形成"挤掉-重连-再挤掉"的循环7 关闭码与重连策略: 1000/1001/1002与主动停止不重连,其余重连原实现"只要能重连就重连",服务端重启或协议不匹配时也会疯狂重连 7.1 退避参数冻结: min(500ms × 2^(n-1), 15000ms)+ ±20% 抖动避免同网段多台设备同时重连打尖峰 8 连接状态机 idle → resolving → connecting → handshaking → streaming → degraded → reconnecting → stopped两端同名,日志可直接对照 contracts/VERSION与web-server/src/config/contract-versions.ts同步到0.2.0
(npm run contracts:check强制两者一致)。二、补齐
rest-api.yaml里漏写的场景结构catalog/export自 v0.7.0 起就返回scenes[],data-models.md§7 也已冻结,
但CatalogBundle漏了这个字段、components里也没有Scene/SceneConfig定义 ——
属于"实现已发布、规格漏写"。只补规格,不改线格式,六个契约版本号均不变:CatalogBundle增加scenes[](标注 0.5.0 起下发);- 新增
Scene/SceneConfig/Vec3schemas(重力 ±200、风 0100 / 0.015Hz、
摩擦 01、坡度 089°、出生点 ≤16、相机follow|fixed|orbit等边界全部写明)。
规格缺失会让两端对字段边界的理解不一致(Windows 端
T-WIN-013正是照这份结构生成的
GDScript 类型)。三、
deploy/proxy/README.md新增第九节:Gitea 站点的附件上传上限与前八节的 Web 服务反代是两个不同站点 —— 托管 Gitea(源码 + Release 附件)的
IIS 站点必须单独放开:上传体积 实测结果 14 MB 通过(HTTP 201) 30.5 MB 失败 HTTP 413 40 MB 失败 HTTP 413 根因是 IIS 默认的
maxAllowedContentLength = 30,000,000字节(≈28.6 MiB)。
这正是 Windows 客户端 v0.1.0 被拆成zip.part0/1/2(用户拿到无法直接解压的碎片)的根因。文档给出放宽到 256 MB 的四处配置(IIS
requestLimits+uploadReadAheadSize、
ARRmaxRequestBytes、Giteaapp.ini的[attachment] MAX_SIZE、前置 nginx 的
client_max_body_size)与curl复验命令。四、文档与脚本
- 补齐
tasks/011~tasks/016与project.yaml条目:此前 T-WEB-011~015
已在代码中落地却缺任务说明书(011 版本号展示 / 012 VRM 优先 / 013 动作标准与骨骼
重绑定 / 014 动作预览 / 015 场景管理 / 016 本契约变更); project.yaml的contracts_version由单个0.4.0改为六项字典
(六项契约已各自独立递增);scripts/package-release.sh:版本号改为从web-server/package.json读取
(与GET /health的version、管理端左下角展示同源),并与project.yaml
交叉校验;同时补上SHA256SUMS与自校验(此前是手工生成的)。
校验
npm run verify:contracts:check(六项一致 + 35 条路由一致)、tsc --noEmit、
18 文件 / 246 项测试、nest build全部通过;opendance-web-v0.7.1.tar.gzsha256:27f92cfb125bbcf29077d4ad90c44720cbca46d23ddef12cd7826d73bd8865e2
部署
curl -fLO https://gitea.kasugano.cn/zijunchiang/opendance-web/releases/download/v0.7.1/opendance-web-v0.7.1.tar.gz curl -fLO https://gitea.kasugano.cn/zijunchiang/opendance-web/releases/download/v0.7.1/SHA256SUMS sha256sum -c SHA256SUMS tar -xzf opendance-web-v0.7.1.tar.gz && cd opendance-web-v0.7.1 bash deploy/install.sh本版不需要重新部署也能继续使用:运行时行为未变,只是
/health报出的
websocket-keypoints契约版本从 0.1.0 变为 0.2.0,以及contracts/快照更新。
若要让/health与新快照一致,重新部署本版即可。Downloads