Skip to content

v1.4.2:配置改为每用户一份(修多用户共用 profile 抢端口)

Choose a tag to compare

@Mzy123l Mzy123l released this 18 Oct 16:21
· 37 commits to main since this release

v1.4.2

配置改为「每个 Windows 用户各一份」:多个人共用一份 DSH profile 时,不再抢同一个监听端口。

根因

多个 Windows 用户共用一份 DSH 的常见做法,是把 .dsh\profiles\desktop 做成
junction / 符号链接指到同一个目录。这样 node_modules 与 cordis.patch.yml
都是共享的 —— 包括里面的 port。两个人同时开 DSH 时,第二个实例必然失败:

[error] 监听 100.64.0.5 失败: listen EADDRINUSE: address already in use 100.64.0.5:19388

于是「插件明明启用了,手机却连不上」;而先启动的那个实例仍占着端口,
后启动的实例连状态文件都写不出可用网址。

修复

  1. 新增本用户配置 $DSH_HOME/remote-access-config.json(默认 %USERPROFILE%\.dsh,
    权限 0600),启动时本地优先于共享 profile:
    • 首次启动以共享 profile 为种子建一份;
    • 设置页保存仍写共享 profile,但宿主只把「这次变了的键」同步进本用户配置再生效 ——
      改端口只影响自己,不会把别人的端口一起改掉;
    • 本用户手改的其它字段,不会被「别的字段保存」顺手覆盖。
  2. 端口被占用时退让:换一个系统空闲端口继续服务(而不是整个远程入口打不开),
    并把实际端口写回本用户配置 —— 下次启动直接用它,手机上的网址也稳定。
  3. 状态文件新增「本用户配置」一行;设置页底部会写明生效的是哪个文件。
  4. 新 Host 配置字段 localConfigFile:'' = 默认路径,off = 关掉这一层(全部走共享 profile),
    其它值 = 显式路径。
  5. 删掉本用户配置文件 = 下次启动重新以共享 profile 为种子(想整体重置就用这招)。

升级注意

  1. 升级到 1.4.2 并重启一次 DSH(index.js 的改动要重启才加载);
  2. 第一次启动会自动建好本用户配置,不需要手写;
  3. 如果状态文件里出现「端口 … 已被占用 → 本次改用 …」,说明发生了退让,
    实际网址以状态文件里「远程访问网址」那一行为准;
  4. 这一版没有重发 APK:外壳代码没动,仍是 1.4.1(versionCode 16)。

测试

  • tools/test-remote-access.mjs 180/180(新增 20 条:本用户配置路径 / 合并 / 差异检测、
    首次启动种子、重启后本地优先、off 时完全不建文件、坏文件先备份再重建、
    设置页保存只同步变了的键、保存即重启本行时也能采纳、端口被占用时退让并把端口写回、
    重启后仍用记住的端口)
  • tools/test-client.mjs 123/123
  • tools/check-config-schema.mjs 12/12(32 个字段,含新增的 localConfigFile)
  • tools/check-dsh-compat.mjs 15/15

测试默认用 localConfigFile: 'off' 隔离。这一版的热重载路径有个测试隔离漏洞
(settings 桩缺该字段时会回落到默认路径),已在 1.4.3 修复并补了回归测试。