Skip to content

Commit 20a6e6f

Browse files
committed
launch()v8.4:端口已通跳过cli auto+桥接服务器connect加8秒超时
1 parent 795191c commit 20a6e6f

2 files changed

Lines changed: 27 additions & 21 deletions

File tree

src/controller/miniprogram.py

Lines changed: 21 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -180,33 +180,36 @@ async def launch(self) -> None:
180180
"未找到微信开发者工具cli,请安装微信开发者工具"
181181
)
182182

183-
# ═══ 阶段1: 启动自动化 ═══
184-
logger.info("═══ 阶段1: 启动自动化 ═══")
183+
# ═══ 阶段1: 检测或启动自动化 ═══
184+
logger.info("═══ 阶段1: 检测或启动自动化 ═══")
185185
logger.info("cli: {} | 项目: {} | 端口: {}", cli_path, project_path, ws_port)
186186

187-
# 先尝试直接 cli auto(如果项目已打开,这步就够了)
188-
auto_ok = self._run_cli("auto", [
189-
cli_path, "auto", "--project", project_path,
190-
"--auto-port", str(ws_port),
191-
])
192-
await asyncio.sleep(3)
193-
194-
# 检查端口是否已通
187+
# 先探测端口:如果9420已通,说明auto已经开启,跳过cli auto(避免重载模拟器!)
195188
port_ok = self._check_tcp_port(ws_port)
196-
197-
if not port_ok:
198-
# 项目可能没打开,先open再auto
199-
logger.info("端口未通,尝试 cli open + cli auto ...")
200-
self._run_cli("open", [cli_path, "open", "--project", project_path])
201-
# open后需要等模拟器启动(关键!模拟器需要时间加载)
202-
logger.info("等待模拟器启动(10秒)...")
203-
await asyncio.sleep(10)
189+
if port_ok:
190+
logger.info("WS端口 {} 已通,跳过cli auto(避免重载模拟器)", ws_port)
191+
else:
192+
# 端口未通,才执行cli auto
193+
logger.info("WS端口 {} 未通,执行cli auto...", ws_port)
204194
self._run_cli("auto", [
205195
cli_path, "auto", "--project", project_path,
206196
"--auto-port", str(ws_port),
207197
])
208198
await asyncio.sleep(3)
209199

200+
# 再检查
201+
if not self._check_tcp_port(ws_port):
202+
# 项目可能没打开,先open再auto
203+
logger.info("端口仍未通,尝试 cli open + cli auto ...")
204+
self._run_cli("open", [cli_path, "open", "--project", project_path])
205+
logger.info("等待模拟器启动(15秒)...")
206+
await asyncio.sleep(15)
207+
self._run_cli("auto", [
208+
cli_path, "auto", "--project", project_path,
209+
"--auto-port", str(ws_port),
210+
])
211+
await asyncio.sleep(5)
212+
210213
# ═══ 阶段2: 等待WS端口就绪(TCP探测,最多20秒) ═══
211214
logger.info("═══ 阶段2: 等待WS端口 {} 就绪 ═══", ws_port)
212215
port_ready = False

src/controller/miniprogram_bridge_server.js

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -33,9 +33,11 @@ async function ensureConnected() {
3333

3434
try {
3535
automator = require('miniprogram-automator');
36-
miniProgram = await automator.connect({
37-
wsEndpoint: `ws://localhost:${WS_PORT}`,
38-
});
36+
// 加超时!参考test_connect.js用Promise.race,避免永远挂住
37+
miniProgram = await Promise.race([
38+
automator.connect({ wsEndpoint: `ws://localhost:${WS_PORT}` }),
39+
new Promise((_, rej) => setTimeout(() => rej(new Error('automator连接超时(8秒)')), 8000)),
40+
]);
3941
currentPage = await miniProgram.currentPage();
4042
connected = true;
4143
console.log(`[OK] 已连接到 ws://localhost:${WS_PORT}`);
@@ -44,6 +46,7 @@ async function ensureConnected() {
4446
} catch (e) {
4547
console.error(`[ERR] 连接失败: ${e.message}`);
4648
connected = false;
49+
miniProgram = null;
4750
return false;
4851
}
4952
}

0 commit comments

Comments
 (0)