feat(overlay): 覆盖网络线序①–⑮ 代码与测试产物入库
覆盖网络线累积产物(此前只在工作区、未入版本库):
- 新增 relay 子系统 src/net/relay/**(wire/duplex/server/client/dialer/switcher/directory/identity/keys/placement/network/addr-override/main/index)
- 新增 src/worker/relay-tunnel.ts、src/web/routes/overlay.ts
- 新增观测/演练脚本 overlay-probe、overlay-failover-drill、overlay-keyring、overlay-holepunch、overlay-jitter、overlay-wan、overlay-relaykey-add、relay-mem-calibrate
- 新增测试 12 个(relay / relay-failover / remote-spawner / instance-port / overlay-{network,auth,bootstrap,identity} / remote-user-fs 等)
验收基线:npm test = 162 pass / 0 fail / 1 skip;--scene all = 12 PASS / 0 SKIP / 0 FAIL;overlay-probe = 12/12
This commit is contained in:
1 parent
640813e84e
commit
146c3d25ef
53 files changed
+16187
-63
No files matched your search
+23
-1
@@ -57,7 +57,29 @@ export interface TunnelOptions {
|
||||
sshBin?: string
|
||||
}
|
||||
|
||||
export class SshTunnel {
|
||||
/**
|
||||
* Worker 侧隧道的**共同面**(覆盖网络 R4)。
|
||||
*
|
||||
* 为什么要有它:`SshTunnel`(拨 sshd)与 `RelayTunnel`(拨 relay)**必须能被 agent 一视同仁地使唤** ——
|
||||
* agent 只做三件事:开起来、加/减转发、判活。传输换谁,这三件事的语义都不变 ⇒ 换传输就只是
|
||||
* `DSHS_RENDEZVOUS_URL` 里 scheme 的差别(`ssh://…` ↔ `wss://…`),**agent 的代码不需要再动**。
|
||||
*/
|
||||
export interface WorkerTunnel {
|
||||
/** 建立(或复用)长连接。**幂等**:已就绪时直接返回。 */
|
||||
ensureMaster(): Promise<void>
|
||||
/** 长连接是否还活着(**判据在传输侧**,不能只看本地记账 —— 见 `SshTunnel` 的注释)。 */
|
||||
isMasterAlive(): Promise<boolean>
|
||||
/** 运行期加一条转发。失败返回 `false`(**不抛**):跨机代理降级 ≠ 本机功能降级。 */
|
||||
forward(port: number): Promise<boolean>
|
||||
/** 撤销一条转发。 */
|
||||
cancel(port: number): Promise<void>
|
||||
/** 关闭长连接(进程退出时)。 */
|
||||
close(): Promise<void>
|
||||
/** 当前已转发的端口(对账自愈用)。 */
|
||||
readonly ports: number[]
|
||||
}
|
||||
|
||||
export class SshTunnel implements WorkerTunnel {
|
||||
/** 内部一律用**已补默认值**的具体类型(否则 `sshBin` 会是 `string | undefined`)。 */
|
||||
private readonly opts: {
|
||||
target: string
|
||||
|
||||
Reference in new issue
Block a user