panrouter 6.1.0 → 6.1.1

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.
Files changed (2) hide show
  1. package/package.json +1 -1
  2. package/pool-worker.mjs +33 -21
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "panrouter",
3
- "version": "6.1.0",
3
+ "version": "6.1.1",
4
4
  "description": "让 Claude Code 免费使用 DeepSeek 等模型,无需 API Key",
5
5
  "type": "module",
6
6
  "bin": {
package/pool-worker.mjs CHANGED
@@ -401,40 +401,46 @@ function isPortOpen(port) {
401
401
  });
402
402
  }
403
403
 
404
- // ─── 确保 9router 在运行 ─────────────────────────────────────────────────
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
- log(`端口 ${SERVER_PORT} 已就绪,跳过启动`, "OK");
409
- return true;
412
+ _serverReady = true;
413
+ log(`9router 已就绪 (端口 ${SERVER_PORT})`, "OK");
414
+ return;
410
415
  }
411
416
 
412
- // 第一次运行 / 升级后 → 运行你的完整安装脚本(检查、安装、注入 DB、启动)
417
+ // 跑你的安装脚本(不等待完成)
413
418
  const setupScript = path.join(__dirname, "setup-9router.cjs");
414
419
  if (fs.existsSync(setupScript)) {
415
420
  log("正在执行 9router 部署脚本...");
416
- try {
417
- execSync(`node "${setupScript}"`, { stdio: "inherit", timeout: 180000 });
418
- } catch (e) {
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
- // 如果脚本没拉起 9router,手动拉一次
424
- for (let i = 0; i < 15; i++) {
426
+ // 后台轮询端口,直到 9router 起来为止,不阻塞主流程
427
+ poll9router();
428
+ }
429
+
430
+ async function poll9router() {
431
+ for (let i = 0; i < 60; i++) { // 等 60 秒
425
432
  if (await isPortOpen(SERVER_PORT)) {
433
+ _serverReady = true;
426
434
  log(`9router 已就绪 (端口 ${SERVER_PORT})`, "OK");
427
- return true;
435
+ return;
428
436
  }
429
- if (i === 3) {
437
+ if (i === 5) {
430
438
  log("尝试直接启动 9router...");
431
439
  spawn("9router", [], { detached: true, stdio: "ignore" }).unref();
432
440
  }
433
441
  await new Promise((r) => setTimeout(r, 1000));
434
442
  }
435
-
436
- log("9router 启动超时", "ERR");
437
- return false;
443
+ log("9router 仍未就绪,节点已注册到主控,后续可接收升级指令", "WARN");
438
444
  }
439
445
 
440
446
  // ─── PID 文件 ────────────────────────────────────────────────────────────────
@@ -500,11 +506,8 @@ export async function start() {
500
506
  // 清理残留进程,确保 100% 干净启动
501
507
  cleanupStaleSelf();
502
508
 
503
- const serverOk = await ensureServer();
504
- if (!serverOk) {
505
- log("无法启动代理服务,终止接入", "ERR");
506
- process.exit(1);
507
- }
509
+ // 后台启动 9router(不阻塞注册)
510
+ await ensureServer();
508
511
 
509
512
  writePid();
510
513
  connectToHub();
@@ -513,6 +516,15 @@ export async function start() {
513
516
  process.on("SIGTERM", gracefulShutdown);
514
517
 
515
518
  log("节点看门狗已启动,等待公网入口...", "ON");
519
+
520
+ // 等 9router 起来后检查状态
521
+ const checkReady = setInterval(async () => {
522
+ if (_serverReady || (await isPortOpen(SERVER_PORT))) {
523
+ _serverReady = true;
524
+ clearInterval(checkReady);
525
+ log("9router 已就绪,节点可正常处理请求", "ON");
526
+ }
527
+ }, 3000);
516
528
  }
517
529
 
518
530
  export function stopWorker() {