botmux 2.98.2 → 2.98.3
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.
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tunnel-client.d.ts","sourceRoot":"","sources":["../../src/platform/tunnel-client.ts"],"names":[],"mappings":"AAMA,OAAO,EAA0C,KAAK,eAAe,EAAqB,MAAM,cAAc,CAAC;AAE/G,wDAAwD;AACxD,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,qDAAqD;IACrD,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,eAAe,CAAC;IACzB,qCAAqC;IACrC,gBAAgB,EAAE,MAAM,MAAM,CAAC;IAC/B,oCAAoC;IACpC,iBAAiB,EAAE,MAAM,MAAM,GAAG,IAAI,CAAC;IACvC,UAAU,EAAE,MAAM,MAAM,CAAC;IACzB,8BAA8B;IAC9B,OAAO,CAAC,EAAE,MAAM,eAAe,EAAE,CAAC;IAClC,GAAG,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;CAC7D;
|
|
1
|
+
{"version":3,"file":"tunnel-client.d.ts","sourceRoot":"","sources":["../../src/platform/tunnel-client.ts"],"names":[],"mappings":"AAMA,OAAO,EAA0C,KAAK,eAAe,EAAqB,MAAM,cAAc,CAAC;AAE/G,wDAAwD;AACxD,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,qDAAqD;IACrD,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,eAAe,CAAC;IACzB,qCAAqC;IACrC,gBAAgB,EAAE,MAAM,MAAM,CAAC;IAC/B,oCAAoC;IACpC,iBAAiB,EAAE,MAAM,MAAM,GAAG,IAAI,CAAC;IACvC,UAAU,EAAE,MAAM,MAAM,CAAC;IACzB,8BAA8B;IAC9B,OAAO,CAAC,EAAE,MAAM,eAAe,EAAE,CAAC;IAClC,GAAG,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;CAC7D;AAmBD,MAAM,WAAW,kBAAkB;IACjC,IAAI,IAAI,IAAI,CAAC;CACd;AAED,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,mBAAmB,GAAG,kBAAkB,CA8OvF"}
|
|
@@ -8,16 +8,19 @@ import { setPlatformTeams, clearPlatformBinding } from './binding.js';
|
|
|
8
8
|
const HEARTBEAT_MS = 30_000;
|
|
9
9
|
const BACKOFF_MIN_MS = 1_000;
|
|
10
10
|
const BACKOFF_MAX_MS = 30_000;
|
|
11
|
-
//
|
|
12
|
-
//
|
|
13
|
-
//
|
|
14
|
-
// -
|
|
15
|
-
// -
|
|
16
|
-
// -
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
const
|
|
20
|
-
const
|
|
11
|
+
// 数据流拨号:并行拨号(happy-eyeballs)。某些部署到平台 LB 某几个 VIP 的链路对新流 ~50% 丢——
|
|
12
|
+
// 坏的 ECMP 分支「静默黑洞」(不回包、抓包实锤 ClientHello 无响应),好连接 ~90ms 就回。串行「拨一条
|
|
13
|
+
// →黑洞等满超时→再拨」冷启动要赌好几秒;改成每波**并行拨几条、谁先到用谁、其余丢弃**:
|
|
14
|
+
// - 每波并行 DATA_DIAL_PARALLEL 条:~50% 单条成功率下,3 条里有 1 条好的概率 ~87.5% → 通常 ~90ms 就建好。
|
|
15
|
+
// - 单条超时 1s(好连接 90ms 就成,1s 足够判黑洞);一波全黑洞才进下一波,最多 DATA_DIAL_MAX_WAVES 波。
|
|
16
|
+
// - 用完即弃、不常驻空闲连接(区别于「预热连接池」,不随机器数堆连接,可扩展)。
|
|
17
|
+
// - 平台对同一个 streamId 只 attach 第一条到的、其余自动 4004 关,协议无需改。
|
|
18
|
+
// - 配合平台连接池:建好的好连接会被复用,拨号(赌)只在冷启动/扩容发生,不是每请求。
|
|
19
|
+
const DATA_DIAL_TIMEOUT_MS = 1_000;
|
|
20
|
+
const DATA_DIAL_PARALLEL = 3;
|
|
21
|
+
const DATA_DIAL_MAX_WAVES = 2;
|
|
22
|
+
const DATA_DIAL_WAVE_BACKOFF_MS = 150;
|
|
23
|
+
const DATA_DIAL_OVERALL_DEADLINE_MS = 6_000;
|
|
21
24
|
export function startPlatformTunnelClient(opts) {
|
|
22
25
|
let stopped = false;
|
|
23
26
|
let ws = null;
|
|
@@ -161,76 +164,100 @@ export function startPlatformTunnelClient(opts) {
|
|
|
161
164
|
function openDataStream(streamId) {
|
|
162
165
|
const url = `${base}/tunnel/data?token=${tokenQ}&stream=${encodeURIComponent(streamId)}`;
|
|
163
166
|
const startedAt = Date.now();
|
|
164
|
-
let
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
if (canRetry) {
|
|
176
|
-
opts.log('数据连接拨号失败,重试', { attempt, reason });
|
|
177
|
-
setTimeout(dial, DATA_DIAL_RETRY_BACKOFF_MS);
|
|
167
|
+
let won = false; // 本 stream 是否已有连接胜出并桥接
|
|
168
|
+
let wave = 0;
|
|
169
|
+
const inflight = new Set(); // 当前在拨/在等的连接(胜出后除胜者外全 terminate)
|
|
170
|
+
// 胜者:桥接到本地 dashboard,并把本 stream 其余在拨的连接全部关掉(用完即弃)。
|
|
171
|
+
const bridge = (winner) => {
|
|
172
|
+
won = true;
|
|
173
|
+
for (const ws of inflight) {
|
|
174
|
+
if (ws === winner)
|
|
175
|
+
continue;
|
|
176
|
+
try {
|
|
177
|
+
ws.terminate();
|
|
178
178
|
}
|
|
179
|
-
|
|
180
|
-
|
|
179
|
+
catch { /* ignore */ }
|
|
180
|
+
}
|
|
181
|
+
inflight.clear();
|
|
182
|
+
// 数据流必须关 permessage-deflate(连接创建时已设),否则大文件帧经网关压缩协商错位 → RSV1 断流。
|
|
183
|
+
const dup = createWebSocketStream(winner);
|
|
184
|
+
const tcp = net.connect(opts.getDashboardPort(), '127.0.0.1');
|
|
185
|
+
const kill = () => {
|
|
186
|
+
try {
|
|
187
|
+
dup.destroy();
|
|
181
188
|
}
|
|
182
|
-
|
|
183
|
-
const dialTimer = setTimeout(() => {
|
|
184
|
-
if (settled)
|
|
185
|
-
return;
|
|
186
|
-
settled = true;
|
|
189
|
+
catch { /* ignore */ }
|
|
187
190
|
try {
|
|
188
|
-
|
|
191
|
+
tcp.destroy();
|
|
189
192
|
}
|
|
190
193
|
catch { /* ignore */ }
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
194
|
+
};
|
|
195
|
+
dup.on('error', kill);
|
|
196
|
+
tcp.on('error', kill);
|
|
197
|
+
tcp.on('close', kill);
|
|
198
|
+
dup.pipe(tcp);
|
|
199
|
+
tcp.pipe(dup);
|
|
200
|
+
};
|
|
201
|
+
// 每波并行拨 DATA_DIAL_PARALLEL 条,谁先 open 谁胜出;一波全黑洞/失败才进下一波(有界)。
|
|
202
|
+
const dialWave = () => {
|
|
203
|
+
if (won)
|
|
204
|
+
return;
|
|
205
|
+
wave++;
|
|
206
|
+
let pending = DATA_DIAL_PARALLEL;
|
|
207
|
+
const onFail = () => {
|
|
208
|
+
if (won)
|
|
199
209
|
return;
|
|
210
|
+
if (--pending > 0)
|
|
211
|
+
return; // 本波还有在拨的,等它们
|
|
212
|
+
// 本波全军覆没:预算内进下一波,否则放弃。
|
|
213
|
+
if (wave < DATA_DIAL_MAX_WAVES && Date.now() - startedAt < DATA_DIAL_OVERALL_DEADLINE_MS) {
|
|
214
|
+
setTimeout(dialWave, DATA_DIAL_WAVE_BACKOFF_MS);
|
|
200
215
|
}
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
216
|
+
else {
|
|
217
|
+
opts.log('数据连接失败', { waves: wave, parallel: DATA_DIAL_PARALLEL });
|
|
218
|
+
}
|
|
219
|
+
};
|
|
220
|
+
for (let k = 0; k < DATA_DIAL_PARALLEL; k++) {
|
|
221
|
+
const data = new WebSocket(url, { perMessageDeflate: false });
|
|
222
|
+
inflight.add(data);
|
|
223
|
+
let done = false;
|
|
224
|
+
const timer = setTimeout(() => {
|
|
225
|
+
if (done)
|
|
226
|
+
return;
|
|
227
|
+
done = true;
|
|
228
|
+
inflight.delete(data);
|
|
210
229
|
try {
|
|
211
|
-
|
|
230
|
+
data.terminate();
|
|
212
231
|
}
|
|
213
232
|
catch { /* ignore */ }
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
233
|
+
onFail();
|
|
234
|
+
}, DATA_DIAL_TIMEOUT_MS);
|
|
235
|
+
data.on('open', () => {
|
|
236
|
+
if (done)
|
|
237
|
+
return;
|
|
238
|
+
done = true;
|
|
239
|
+
clearTimeout(timer);
|
|
240
|
+
inflight.delete(data);
|
|
241
|
+
if (won) {
|
|
242
|
+
try {
|
|
243
|
+
data.terminate();
|
|
244
|
+
}
|
|
245
|
+
catch { /* ignore */ }
|
|
246
|
+
return;
|
|
247
|
+
} // 已有胜者 → 弃掉
|
|
248
|
+
bridge(data);
|
|
249
|
+
});
|
|
250
|
+
data.on('error', () => {
|
|
251
|
+
if (done)
|
|
252
|
+
return;
|
|
253
|
+
done = true;
|
|
254
|
+
clearTimeout(timer);
|
|
255
|
+
inflight.delete(data);
|
|
256
|
+
onFail();
|
|
257
|
+
});
|
|
258
|
+
}
|
|
232
259
|
};
|
|
233
|
-
|
|
260
|
+
dialWave();
|
|
234
261
|
}
|
|
235
262
|
connect();
|
|
236
263
|
return {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tunnel-client.js","sourceRoot":"","sources":["../../src/platform/tunnel-client.ts"],"names":[],"mappings":"AAAA,oCAAoC;AACpC,iDAAiD;AACjD,kDAAkD;AAClD,OAAO,GAAG,MAAM,UAAU,CAAC;AAC3B,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACnC,OAAO,EAAE,SAAS,EAAE,qBAAqB,EAAE,MAAM,IAAI,CAAC;AACtD,OAAO,EAAE,gBAAgB,EAAE,oBAAoB,EAA2C,MAAM,cAAc,CAAC;AAyB/G,MAAM,YAAY,GAAG,MAAM,CAAC;AAC5B,MAAM,cAAc,GAAG,KAAK,CAAC;AAC7B,MAAM,cAAc,GAAG,MAAM,CAAC;AAC9B,
|
|
1
|
+
{"version":3,"file":"tunnel-client.js","sourceRoot":"","sources":["../../src/platform/tunnel-client.ts"],"names":[],"mappings":"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"}
|