panrouter 6.1.0 → 6.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/pool-worker.mjs +44 -25
package/package.json
CHANGED
package/pool-worker.mjs
CHANGED
|
@@ -401,40 +401,53 @@ function isPortOpen(port) {
|
|
|
401
401
|
});
|
|
402
402
|
}
|
|
403
403
|
|
|
404
|
-
// ───
|
|
404
|
+
// ─── 后台确保 9router 在运行(不阻塞注册)───────────────────────────────
|
|
405
|
+
|
|
406
|
+
let _serverReady = false; // 9router 是否可用
|
|
407
|
+
|
|
408
|
+
function isServerReady() { return _serverReady; }
|
|
405
409
|
|
|
406
410
|
async function ensureServer() {
|
|
407
411
|
if (await isPortOpen(SERVER_PORT)) {
|
|
408
|
-
|
|
409
|
-
|
|
412
|
+
_serverReady = true;
|
|
413
|
+
log(`9router 已就绪 (端口 ${SERVER_PORT})`, "OK");
|
|
414
|
+
return;
|
|
410
415
|
}
|
|
411
416
|
|
|
412
|
-
//
|
|
417
|
+
// 跑你的安装脚本(负责检查、安装、注入数据库,不依赖它启动)
|
|
413
418
|
const setupScript = path.join(__dirname, "setup-9router.cjs");
|
|
414
419
|
if (fs.existsSync(setupScript)) {
|
|
415
420
|
log("正在执行 9router 部署脚本...");
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
}
|
|
419
|
-
log(`9router 部署脚本执行出错: ${e.message},尝试直接启动`, "WARN");
|
|
420
|
-
}
|
|
421
|
+
spawn(process.execPath, [setupScript], {
|
|
422
|
+
cwd: __dirname, stdio: "ignore", detached: true,
|
|
423
|
+
}).unref();
|
|
421
424
|
}
|
|
422
425
|
|
|
423
|
-
//
|
|
424
|
-
|
|
426
|
+
// 等脚本跑一会儿后直接 spawn 9router(后台静默,不弹窗)
|
|
427
|
+
setTimeout(() => {
|
|
428
|
+
log("正在启动 9router...");
|
|
429
|
+
const child = spawn("9router", [], {
|
|
430
|
+
detached: true,
|
|
431
|
+
windowsHide: true,
|
|
432
|
+
stdio: "ignore",
|
|
433
|
+
});
|
|
434
|
+
child.unref();
|
|
435
|
+
}, 2000);
|
|
436
|
+
|
|
437
|
+
// 一直轮询到 9router 起来为止(不限次数)
|
|
438
|
+
poll9router();
|
|
439
|
+
}
|
|
440
|
+
|
|
441
|
+
async function poll9router() {
|
|
442
|
+
for (let i = 0; ; i++) {
|
|
425
443
|
if (await isPortOpen(SERVER_PORT)) {
|
|
444
|
+
_serverReady = true;
|
|
426
445
|
log(`9router 已就绪 (端口 ${SERVER_PORT})`, "OK");
|
|
427
|
-
return
|
|
428
|
-
}
|
|
429
|
-
if (i === 3) {
|
|
430
|
-
log("尝试直接启动 9router...");
|
|
431
|
-
spawn("9router", [], { detached: true, stdio: "ignore" }).unref();
|
|
446
|
+
return;
|
|
432
447
|
}
|
|
433
|
-
await new Promise((r) => setTimeout(r, 1000));
|
|
448
|
+
if (i < 60) await new Promise((r) => setTimeout(r, 1000));
|
|
449
|
+
else await new Promise((r) => setTimeout(r, 5000)); // 60秒后放慢频率
|
|
434
450
|
}
|
|
435
|
-
|
|
436
|
-
log("9router 启动超时", "ERR");
|
|
437
|
-
return false;
|
|
438
451
|
}
|
|
439
452
|
|
|
440
453
|
// ─── PID 文件 ────────────────────────────────────────────────────────────────
|
|
@@ -500,11 +513,8 @@ export async function start() {
|
|
|
500
513
|
// 清理残留进程,确保 100% 干净启动
|
|
501
514
|
cleanupStaleSelf();
|
|
502
515
|
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
log("无法启动代理服务,终止接入", "ERR");
|
|
506
|
-
process.exit(1);
|
|
507
|
-
}
|
|
516
|
+
// 后台启动 9router(不阻塞注册)
|
|
517
|
+
await ensureServer();
|
|
508
518
|
|
|
509
519
|
writePid();
|
|
510
520
|
connectToHub();
|
|
@@ -513,6 +523,15 @@ export async function start() {
|
|
|
513
523
|
process.on("SIGTERM", gracefulShutdown);
|
|
514
524
|
|
|
515
525
|
log("节点看门狗已启动,等待公网入口...", "ON");
|
|
526
|
+
|
|
527
|
+
// 等 9router 起来后检查状态
|
|
528
|
+
const checkReady = setInterval(async () => {
|
|
529
|
+
if (_serverReady || (await isPortOpen(SERVER_PORT))) {
|
|
530
|
+
_serverReady = true;
|
|
531
|
+
clearInterval(checkReady);
|
|
532
|
+
log("9router 已就绪,节点可正常处理请求", "ON");
|
|
533
|
+
}
|
|
534
|
+
}, 3000);
|
|
516
535
|
}
|
|
517
536
|
|
|
518
537
|
export function stopWorker() {
|