From dfdd69b3752315db358ea13bba9be8bf159bdfb5 Mon Sep 17 00:00:00 2001 From: TermiNexus Date: Mon, 12 Oct 2026 10:23:07 +0800 Subject: [PATCH] =?UTF-8?q?feat(mirror):=20=E6=8E=A2=E9=92=88=E8=87=AA?= =?UTF-8?q?=E5=8A=A8=E5=8A=A0=E8=BD=BD=E5=B9=B6=E8=BD=AC=E5=82=A8=EF=BC=88?= =?UTF-8?q?/probe=5Frailgun.js=20=E8=B7=AF=E7=94=B1=20+=20=E5=8A=A0?= =?UTF-8?q?=E8=BD=BD=E5=99=A8=E5=BC=95=E5=85=A5=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - tools/serve.js: 新增 /probe_railgun.js 路由,读 sockets/probe_railgun.js - main.9f4e7a89.js: 等 __gameMode__ 就绪后自动 fetch+eval 探针(localStorage.hornetProbe='0' 可关闭),数据走 POST /__probe__ 落盘 3DTank/names/probe_railgun.log,省去每次手粘控制台 --- 3DTank/tools/serve.js | 17 +++++++++++++++++ 3dtank.com/play/static/js/main.9f4e7a89.js | 22 ++++++++++++++++++++++ 2 files changed, 39 insertions(+) diff --git a/3DTank/tools/serve.js b/3DTank/tools/serve.js index efed03b..bcf5d7d 100644 --- a/3DTank/tools/serve.js +++ b/3DTank/tools/serve.js @@ -232,6 +232,23 @@ const Server = http.createServer((Req, Res) => { }).end(Hook); return; } + // /probe_railgun.js:武器链路现场探针(只读采样 + WS 上行记录,数据 POST /__probe__ 落盘) + // 由加载器自动引入(localStorage.hornetProbe='0' 可关闭),省去每次手粘控制台。 + if (UrlPath.split('?')[0] === '/probe_railgun.js') { + const ProbeFile = path.join(ROOT, 'sockets', 'probe_railgun.js'); + if (!fs.existsSync(ProbeFile)) { + Res.writeHead(404, { 'Content-Type': 'text/plain; charset=utf-8' }).end('probe_railgun.js not found'); + return; + } + const Probe = fs.readFileSync(ProbeFile); + Res.writeHead(200, { + 'Content-Type': 'application/javascript; charset=utf-8', + 'Content-Length': Probe.length, + 'Cache-Control': 'no-cache', + 'X-Hornet-Probe': 'local', + }).end(Probe); + return; + } // /__probe__:页面内探针的**网络转储**入口(控制台刷屏太扰,改为 POST 落盘) // 探针(sockets/probe_railgun.js)把组件清单与采样分批 POST 到这里, // 这里追加写入 3DTank/names/probe_railgun.log,供离线分析。 diff --git a/3dtank.com/play/static/js/main.9f4e7a89.js b/3dtank.com/play/static/js/main.9f4e7a89.js index f49567e..7120c83 100644 --- a/3dtank.com/play/static/js/main.9f4e7a89.js +++ b/3dtank.com/play/static/js/main.9f4e7a89.js @@ -152,6 +152,28 @@ try { } } + // ===== 自动加载武器链路探针(默认开;localStorage.hornetProbe='0' 关闭)===== + // 开关只能用 localStorage:hash 会被游戏当路由(进不去战场),查询串会被当 config 参数(握手 1005)。 + // 探针数据走 POST /__probe__ 落盘到 3DTank/names/probe_railgun.log,不刷控制台。 + if (localStorage.getItem('hornetProbe') !== '0') { + (async () => { + for (let i = 0; i < 900; i++) { // 等进战场(最多 15 分钟) + if (window.__gameMode__) break; + await new Promise((R) => setTimeout(R, 1000)); + } + if (!window.__gameMode__) { console.warn('[Hornet] 探针跳过:等不到 __gameMode__'); return; } + try { + const __probe_resp__ = await fetch('/probe_railgun.js', { cache: 'no-cache' }); + if (__probe_resp__.ok) { + (0, eval)(await __probe_resp__.text()); + console.log('[Hornet] 探针已自动加载并开始转储(localStorage.hornetProbe="0" 可关闭)'); + } else { + console.warn('[Hornet] 探针加载失败: HTTP ' + __probe_resp__.status); + } + } catch (__probe_err__) { console.warn('[Hornet] 探针加载异常:', __probe_err__); } + })(); + } + // ===== Service Worker:已从模板移除(排查断联用,避免单包缓存接管干扰)===== // 需要恢复时见 git 历史(tools/split.js 模板);hornet_sw.js 本体与 serve.js 的 /hornet_sw.js 路由保留未删。