dynapm 1.0.13 → 1.0.14

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/CHANGELOG.md CHANGED
@@ -5,26 +5,45 @@
5
5
  格式基于 [Keep a Changelog](https://keepachangelog.com/zh-CN/1.0.0/),
6
6
  版本号遵循 [语义化版本](https://semver.org/lang/zh-CN/)。
7
7
 
8
+ ## [1.0.14] - 2026-03-20
9
+
10
+ ### 🔴 Bug 修复
11
+ - **按需启动 POST 请求体丢失(严重)**: uWS 的 onData 回调中 ArrayBuffer 是借用语义,`Buffer.from(ab)` 底层数据被后续回调覆盖。改用 `Buffer.alloc + copy` 确保数据复制
12
+ - **并发按需启动返回 502**: 多个请求同时到达离线服务时,只有第一个触发启动,其他请求等待启动完成后再代理
13
+ - **transfer-encoding 头冲突**: forwardProxyRequest 中过滤 transfer-encoding 头,避免与 content-length 冲突导致后端 400
14
+ - **后端崩溃自动恢复**: 检测到后端不可达(ECONNREFUSED)时,自动将非 proxyOnly 服务状态重置为 offline
15
+ - **端口路由并发启动**: handlePortBindingRequest 补全 starting/stopping 状态处理,与 hostname 路由保持一致
16
+
17
+ ### 🔒 安全加固
18
+ - 请求体大小限制 10MB,防止 DoS 攻击
19
+ - WebSocket 消息队列限制 1000 条,防止内存泄漏
20
+ - CRLF 注入防护:请求头值中的 `\r\n` 被清理
21
+ - 端口路由 WebSocket close handler 补充后端连接清理
22
+
23
+ ### 🚀 性能优化
24
+ - **去除 undici,恢复原生 http 模块**: 吞吐量从 4,523 提升至 **5,942 req/s(+31%)**,延迟从 10.6ms 降至 **10.3ms**
25
+ - 预编译 CRLF 正则,避免热路径重复创建
26
+ - Set 替代内联条件判断,优化请求头跳过逻辑
27
+
28
+ ### 🧪 测试(81 个用例全部通过)
29
+ - test-proxy-comprehensive.ts: 23 个综合代理测试
30
+ - test-edge-cases.ts: 15 个极端场景测试
31
+ - test-gateway-robustness.ts: 13 个健壮性测试
32
+ - test-admin-api-lifecycle.ts: 12 个管理 API 生命周期测试
33
+ - test-port-route-start.ts: 9 个端口路由按需启动测试
34
+ - test-security-stability.ts: 9 个安全与稳定性深度测试
35
+
36
+ ---
37
+
8
38
  ## [1.0.13] - 2026-02-10
9
39
 
10
40
  ### 🚀 性能优化
11
- - **重大性能提升**:使用 undici 替代原生 http 模块作为 HTTP 客户端
12
- - 吞吐量提升 **28.2%**:4345 → 5571 req/s
13
- - 延迟保持 11.4ms(无退化)
14
- - 使用 `undici.request()` API 实现流式转发
15
- - 避免了 `undici.stream()` + Writable stream 的包装开销
41
+ - 使用 undici 替代原生 http 模块(已在 v1.0.14 回退,原生 http 性能更优)
16
42
 
17
43
  ### 🔧 改进
18
- - 移除不再使用的 http/https 模块相关代码
19
- - 清理 RouteMapping 中的冗余字段(isHttps、httpModule、httpAgent)
44
+ - 清理 RouteMapping 中的冗余字段
20
45
  - 代码更简洁,维护性更好
21
46
 
22
- ### 📚 技术细节
23
- - undici 的 `request()` API 比 `stream()` API 更适合代理场景
24
- - `stream()` 适用于消费响应(写入文件、解析 JSON)
25
- - `request()` 返回 Readable stream,可以手动控制流式转发
26
- - 完全保持流式处理,客户端延迟无增加
27
-
28
47
  ---
29
48
 
30
49
  ## [1.0.12] - 2026-02-10
package/CLAUDE.md CHANGED
@@ -1,21 +1,20 @@
1
1
  # DynaPM - Claude Code 项目配置
2
2
 
3
- DynaPM 是一个智能网关,通过按需启动和闲置自动停止的方式,帮助用户在资源受限的服务器上管理数百个低频访问的服务。
3
+ DynaPM 是一个智能网关(类似nginx)/进程管理工具(类似pm2),通过按需启动(请求到达时通过查找配置判断请求属于哪个程序,然后网关转发请求,当程序还未启动会执行启动命令等待就绪后再实际转发)和闲置自动停止的方式,帮助用户在资源受限的服务器上运行成千上万个低频访问+少量高频访问的服务。
4
4
 
5
5
  **核心特性:**
6
- - ⚡ 极速冷启动(开销仅 25ms)
7
- - 🚀 流式代理(1-2ms 延迟)
6
+ - ⚡ 极速冷启动
7
+ - 🚀 双向流式转发代理实现极低的请求延迟:将请求体流式给代理服务,将代理服务的响应流式给请求者 所以不需要缓冲请求或者响应,唯一的需要缓冲的时机就是请求到达网关,但是需要被网关唤起的程序还没有启动成功的时候
8
8
  - 🌐 支持 SSE 和 WebSocket
9
- - 🎛️ 通用服务管理(可替代PM2、Docker、systemd 等)
10
- - 🔄 闲置自动回收
9
+ - 🎛️ 基于bash的通用服务管理(可用于管理PM2、Docker、systemd 等任意服务)
10
+ - 🔄 闲置自动回收资源
11
11
 
12
12
  ## 技术栈
13
13
 
14
14
  - **运行时**: Node.js 22+
15
- - **Web 框架**: uWebSockets.js(性能比 Fastify 快 10 倍以上)
16
- - **日志**: Pino(异步结构化日志)
15
+ - **Web 框架**: uWebSockets.js(最佳性能)
16
+ - **日志**: Pino
17
17
  - **配置**: c12(支持 TypeScript)
18
- - **构建**: rslib
19
18
  - **包管理**: pnpm
20
19
  - **测试**: tsx + 自定义测试套件
21
20
 
@@ -37,8 +36,6 @@ DynaPM/
37
36
  │ ├── test-all.ts # 完整测试套件(12个测试)
38
37
  │ ├── server-*.ts # 测试服务器
39
38
  │ └── benchmark.js # 性能测试
40
- ├── docs/
41
- │ └── NPM_OIDC_SETUP.md # npm OIDC 发布配置指南
42
39
  ├── .github/workflows/
43
40
  │ └── release.yml # 自动发布到 npm
44
41
  ├── CHANGELOG.md # 版本更新日志
@@ -49,12 +46,7 @@ DynaPM/
49
46
 
50
47
  ## 开发指南
51
48
 
52
- ### 快速开始
53
-
54
49
  ```bash
55
- # 安装依赖
56
- pnpm install
57
-
58
50
  # 运行测试
59
51
  pnpm test
60
52
 
@@ -67,4 +59,4 @@ pnpm benchmark
67
59
 
68
60
  ### 发布新版本
69
61
 
70
- 流程 : CHANGELOG → commit npm version (git tag) → push
62
+ 流程 : CHANGELOG → commit →更新 npm version (git add tag) →git push (github actions 会通过 oicd 发包 npm )
package/README.md CHANGED
@@ -4,7 +4,7 @@
4
4
 
5
5
  > **Dynamic Process Manager** - A lightweight, universal service management system with serverless-like features.
6
6
 
7
- [![npm version](https://badge.fury.io/js/dynapm.svg)](https://www.npmjs.com/package/dynapm) ![Tests](https://img.shields.io/badge/tests-12%2F12%20passing-green) ![Performance](https://img.shields.io/badge/overhead-25ms-brightgreen)
7
+ [![npm version](https://badge.fury.io/js/dynapm.svg)](https://www.npmjs.com/package/dynapm) ![Tests](https://img.shields.io/badge/tests-81%2F81%20passing-green) ![Performance](https://img.shields.io/badge/overhead-25ms-brightgreen)
8
8
 
9
9
  DynaPM is a **lightweight alternative** to complex container orchestration platforms (like Knative, Sablier) for private deployments. It helps you manage hundreds of low-frequency services on resource-constrained servers by starting them on-demand and stopping them when idle.
10
10
 
@@ -57,7 +57,7 @@ You have many side projects or internal tools that:
57
57
 
58
58
  - **DynaPM overhead**: Only **25ms** (startup command: 8ms + port wait: 17ms)
59
59
  - **Instant retry**: Zero-delay polling, forward immediately when port is ready
60
- - **Total cold start**: ~500ms (including service boot time, e.g., ~475ms for Node.js apps)
60
+ - **Total cold start**: ~185ms (including service boot time, e.g., ~160ms for Node.js apps)
61
61
 
62
62
  ### 🚀 **Stream Proxying**
63
63
 
@@ -147,9 +147,9 @@ Configure ANY service using bash commands - no limits:
147
147
  ```
148
148
  Test Environment: Node.js HTTP Server (autocannon benchmark)
149
149
 
150
- ✅ Cold start: ~48ms (DynaPM: 25ms + service boot: 23ms)
151
- ✅ Stream proxy: Avg 9.5ms (range: 8-14ms)
152
- ✅ Throughput: 8,383 req/s (multi-service, 60 concurrent)
150
+ ✅ Cold start: ~185ms (DynaPM: 25ms + service boot: 160ms)
151
+ ✅ Stream proxy: Avg 10.3ms (range: 9-12ms)
152
+ ✅ Throughput: 5,942 req/s (multi-service, 150 concurrent)
153
153
  ✅ Load test: Low latency even under high concurrency
154
154
  ✅ Memory overhead: ~50MB (Node.js runtime)
155
155
  ✅ Bundle size: 21.7KB (minified)
@@ -245,7 +245,7 @@ pnpm test
245
245
 
246
246
  ### Test Coverage
247
247
 
248
- The automated tests validate 12 core functionalities:
248
+ The automated tests validate 81 test cases across 6 test suites:
249
249
 
250
250
  1. ✅ **On-demand start** - Services auto-start when offline
251
251
  2. ✅ **Hot start** - Direct proxy when service is running
@@ -259,6 +259,9 @@ The automated tests validate 12 core functionalities:
259
259
  10. ✅ **SSE streaming** - Server-Sent Events proxy support
260
260
  11. ✅ **WebSocket** - WebSocket bidirectional communication support
261
261
  12. ✅ **Long connections** - Active connections prevent premature shutdown
262
+ 13. ✅ **Concurrent startup** - Multiple requests to offline service
263
+ 14. ✅ **Security hardening** - Body size limits, CRLF injection protection
264
+ 15. ✅ **Port routing** - Direct port-based proxy and on-demand start
262
265
 
263
266
  ### Test Output Example
264
267
 
@@ -426,8 +429,8 @@ Test: Total time from offline to first accessible request
426
429
 
427
430
  Results:
428
431
  ├─ DynaPM overhead: 25ms (startup command: 8ms + TCP port wait: 17ms)
429
- ├─ Service boot: 17ms (Node.js application)
430
- └─ Total cold start: 42ms
432
+ ├─ Service boot: 160ms (Node.js application)
433
+ └─ Total cold start: 185ms
431
434
  ```
432
435
 
433
436
  ### Stream Proxy Performance
@@ -436,30 +439,23 @@ Results:
436
439
  Test: Single request latency when service is running
437
440
 
438
441
  Results:
439
- ├─ Average latency: 9.3ms
440
- ├─ Min latency: 8ms
442
+ ├─ Average latency: 10.3ms
443
+ ├─ Min latency: 9ms
441
444
  ├─ Max latency: 12ms
442
- └─ Latency range: 8-12ms
445
+ └─ Latency range: 9-12ms
443
446
  ```
444
447
 
445
448
  ### Throughput Performance
446
449
 
447
450
  ```
448
- Test: Multi-service benchmark (3 services × 20 concurrent, 5 seconds)
451
+ Test: Multi-service benchmark (3 services × 50 concurrent, 5 seconds)
449
452
 
450
453
  Results:
451
- ├─ Total requests: 42,000 requests
452
- ├─ Average throughput: 8,383 req/s
453
- ├─ Per-service: 2,794 req/s
454
+ ├─ Total requests: 29,710 requests
455
+ ├─ Average throughput: 5,942 req/s
456
+ ├─ Per-service: ~1,980 req/s
454
457
  ├─ Errors: 0
455
458
  └─ Test duration: 5 seconds
456
-
457
- Test: Single service benchmark (50 concurrent, 5 seconds)
458
-
459
- Results:
460
- ├─ Requests/sec: 4,225+ req/s
461
- ├─ Average latency: ~23ms
462
- └─ Total requests: 21k requests
463
459
  ```
464
460
 
465
461
  ### Resource Usage
package/README_zh.md CHANGED
@@ -4,7 +4,7 @@
4
4
 
5
5
  > **动态进程管理器** - 具有类 serverless 特性的轻量级通用服务管理系统
6
6
 
7
- [![npm version](https://badge.fury.io/js/dynapm.svg)](https://www.npmjs.com/package/dynapm) ![Tests](https://img.shields.io/badge/tests-12%2F12%20passing-green) ![Performance](https://img.shields.io/badge/overhead-25ms-brightgreen)
7
+ [![npm version](https://badge.fury.io/js/dynapm.svg)](https://www.npmjs.com/package/dynapm) ![Tests](https://img.shields.io/badge/tests-81%2F81%20passing-green) ![Performance](https://img.shields.io/badge/overhead-25ms-brightgreen)
8
8
 
9
9
  DynaPM 是**复杂容器编排平台(如 Knative、Sablier)的轻量级替代方案**,专为私有化部署设计。它通过按需启动和闲置自动停止的方式,帮助你在资源受限的服务器上管理数百个低频访问的服务。
10
10
 
@@ -57,7 +57,7 @@ DynaPM 是**复杂容器编排平台(如 Knative、Sablier)的轻量级替
57
57
 
58
58
  - **DynaPM 开销**:仅 **25ms**(启动命令 8ms + 端口等待 17ms)
59
59
  - **失败立即重试**:无延迟轮询,端口可用即刻转发
60
- - **总冷启动**:~500ms(包括服务本身启动时间,如 Node.js 应用 ~475ms
60
+ - **总冷启动**:~185ms(包括服务本身启动时间,如 Node.js 应用 ~160ms
61
61
 
62
62
  ### 🚀 **流式代理**
63
63
 
@@ -146,9 +146,9 @@ DynaPM 原生支持现代实时通信协议:
146
146
  ```
147
147
  测试环境:Node.js HTTP 服务器 (autocannon 压测)
148
148
 
149
- ✅ 冷启动时间: ~48ms (DynaPM: 25ms + 服务启动: 23ms)
150
- ✅ 流式代理延迟: 平均 9.5ms (范围: 8-14ms)
151
- ✅ 吞吐量: 8,383 req/s (多服务, 60 并发)
149
+ ✅ 冷启动时间: ~185ms (DynaPM: 25ms + 服务启动: 160ms)
150
+ ✅ 流式代理延迟: 平均 10.3ms (范围: 9-12ms)
151
+ ✅ 吞吐量: 5,942 req/s (多服务, 150 并发)
152
152
  ✅ 压测延迟: 高并发下保持低延迟
153
153
  ✅ 内存开销: ~50MB (Node.js 运行时)
154
154
  ✅ 代码体积: 21.7KB (压缩后)
@@ -244,7 +244,7 @@ pnpm test
244
244
 
245
245
  ### 测试覆盖场景
246
246
 
247
- 自动化测试会验证以下 12 个核心功能:
247
+ 自动化测试会验证以下 81 个测试用例(6 个测试套件):
248
248
 
249
249
  1. ✅ **按需启动** - 服务离线时自动启动
250
250
  2. ✅ **热启动** - 服务运行时直接代理,无需重新启动
@@ -258,6 +258,9 @@ pnpm test
258
258
  10. ✅ **SSE 流式传输** - Server-Sent Events 代理支持
259
259
  11. ✅ **WebSocket** - WebSocket 双向通信支持
260
260
  12. ✅ **长连接代理** - 活跃连接阻止服务被提前关闭
261
+ 13. ✅ **并发启动** - 多个请求同时到达离线服务
262
+ 14. ✅ **安全加固** - 请求体大小限制、CRLF 注入防护
263
+ 15. ✅ **端口路由** - 端口直连代理和按需启动
261
264
 
262
265
  ### 测试输出示例
263
266
 
@@ -424,8 +427,8 @@ npm install -g autocannon
424
427
 
425
428
  结果:
426
429
  ├─ DynaPM 开销: 25ms (启动命令 8ms + TCP 端口等待 17ms)
427
- ├─ 服务启动时间: 17ms (Node.js 应用)
428
- └─ 总冷启动时间: 42ms
430
+ ├─ 服务启动时间: 160ms (Node.js 应用)
431
+ └─ 总冷启动时间: 185ms
429
432
  ```
430
433
 
431
434
  ### 流式代理性能
@@ -434,22 +437,22 @@ npm install -g autocannon
434
437
  测试:服务运行时的单次请求延迟
435
438
 
436
439
  结果:
437
- ├─ 平均延迟: 9.3ms
438
- ├─ 最小延迟: 8ms
440
+ ├─ 平均延迟: 10.3ms
441
+ ├─ 最小延迟: 9ms
439
442
  ├─ 最大延迟: 12ms
440
- └─ 延迟范围: 8-12ms
443
+ └─ 延迟范围: 9-12ms
441
444
  ```
442
445
 
443
446
  ### 吞吐量性能
444
447
 
445
448
  ```
446
- 测试:autocannon 压测 (100 并发, 10 秒)
449
+ 测试:多服务混合压测 (3 服务 × 50 并发, 5 秒)
447
450
 
448
451
  结果:
449
- ├─ 请求数/秒: 4,225 req/s
450
- ├─ 平均延迟: 23.16ms
451
- ├─ 总请求数: 42k requests
452
- └─ 测试时长: 10
452
+ ├─ 请求数/秒: 5,942 req/s
453
+ ├─ 平均延迟: ~10ms
454
+ ├─ 总请求数: 29,710 requests
455
+ └─ 测试时长: 5
453
456
  ```
454
457
 
455
458
  ### 资源占用
package/TASK.md ADDED
@@ -0,0 +1,53 @@
1
+ 具有类 serverless 特性的轻量级通用服务管理系统:dynapm
2
+ ## dynapm 开发
3
+
4
+ /loop 先检查 TASK.md 中是否有未完成的任务请逐项完成并在充分test验证再继续下一项,如果没有则请请完善当前项目:测试更多代理场景,确保网关程序没有问题,监测并优化程序性能,修改完毕后需要使用 pilot 进行实际运行测试,请自我完善,不要询问我任何事情,也不要切换其他模式(例如 plan mode)
5
+ 作为网关的测试一定要非常严谨,测试各种可能的情况以及极端情况。
6
+ 所有文件使用 ts,需要临时运行的使用 node --experimental-strip-types -e xxx.ts 来执行
7
+
8
+ ## TASKS
9
+
10
+ [x] 充分测试当前的代理功能是否正确
11
+ [x] 创建一个实用的dynam能力演示程序:实现一个运行ts/js的 serveless host(并不属于 dynapm,但是可以被 dynapm 运行,然后请求又可以被这个 serveless host 路由到 对应的 ts文件去执行):支持用户通过网站访问并编写 ts 上传执行和测试执行
12
+
13
+ ## 已完成的工作
14
+
15
+ ### 2026-03-20
16
+
17
+ #### 网关 Bug 修复
18
+ - **并发按需启动修复**: 多个请求同时到达离线服务时,只有第一个触发启动,其他请求等待启动完成后再代理(之前返回 502)
19
+ - **后端崩溃自动恢复**: 当 handleDirectProxy 检测到后端不可达(ECONNREFUSED),自动将非 proxyOnly 服务状态重置为 offline,后续请求可重新触发按需启动
20
+ - **端口路由并发启动修复**: handlePortBindingRequest 补全 starting/stopping 状态处理,与 hostname 路由保持一致
21
+ - **echo-server 支持命令行端口参数**: `parseInt(process.argv[2] || '3099')`,允许不同测试配置使用不同端口
22
+ - **按需启动 POST 请求体丢失修复(严重)**: uWS 的 onData 回调中 ArrayBuffer 是借用语义,`Buffer.from(ab)` 底层数据被后续回调覆盖。改用 `Buffer.alloc + copy` 确保数据复制
23
+ - **transfer-encoding 头冲突修复**: forwardProxyRequest 中过滤 transfer-encoding 头,避免与 content-length 冲突导致后端 400
24
+ - **请求体大小限制(10MB)**: collectRequestBody 超过限制时截断,防止 DoS 攻击
25
+ - **WebSocket 消息队列限制(1000)**: 防止后端未连接时消息无限堆积导致内存泄漏
26
+ - **端口路由 WebSocket close 清理**: 端口路由的 close handler 补充后端 WebSocket 关闭逻辑
27
+
28
+ #### 性能优化
29
+ - **预编译 CRLF 正则**: `GatewayConstants.CRLF_REGEX` 避免热路径中重复创建正则对象
30
+ - **Set 替代内联条件**: `GatewayConstants.SKIP_REQUEST_HEADERS` 使用 Set.has() 替代重复 toLowerCase + 条件判断
31
+
32
+ #### 测试覆盖(81 个测试全部通过)
33
+ - **test-proxy-comprehensive.ts**: 23 个综合代理测试
34
+ - **test-edge-cases.ts**: 15 个极端场景测试
35
+ - **test-gateway-robustness.ts**: 13 个健壮性测试
36
+ - **test-port-route-start.ts**: 9 个端口路由按需启动测试
37
+ - **test-admin-api-lifecycle.ts**: 12 个管理 API 生命周期测试
38
+ - **test-security-stability.ts**: 9 个安全与稳定性深度测试
39
+ - 端口路由并发按需启动(10个同时请求)
40
+ - 端口路由多种 HTTP 方法(GET/POST/PUT/DELETE/OPTIONS/PATCH)
41
+ - 端口路由查询参数转发(含中文编码)
42
+ - 端口路由大请求体转发(100KB)
43
+ - 端口路由流式响应(20 chunks)
44
+ - 端口路由状态码透传(200/201/400/404/500)
45
+ - 端口路由 CRLF 注入防护
46
+ - 端口路由后端崩溃恢复
47
+ - 端口路由闲置后重新按需启动
48
+
49
+ #### Serverless Host 演示
50
+ - test/services/serverless-host.ts: 轻量级 TypeScript Serverless 运行时
51
+ - Web 管理界面编写/上传/执行/删除函数
52
+ - 使用 Node --experimental-strip-types 直接加载 TS 函数
53
+ - 已添加到 dynapm.config.ts 作为 serverless-host 服务
@@ -34,6 +34,10 @@ export declare class AdminApiHandler {
34
34
  * 获取服务运行时长
35
35
  */
36
36
  private getServiceUptime;
37
+ /**
38
+ * 在所有路由表中查找服务
39
+ */
40
+ private findServiceMapping;
37
41
  /**
38
42
  * 处理管理 API 请求
39
43
  */
@@ -17,6 +17,8 @@ export declare class Gateway {
17
17
  private logging;
18
18
  /** 管理 API 处理器 */
19
19
  private adminApi;
20
+ /** 服务启动 Promise 追踪:serviceName -> 启动完成 Promise */
21
+ private startingPromises;
20
22
  constructor(config: DynaPMConfig, logger: Logger);
21
23
  /**
22
24
  * 初始化服务映射和端口绑定
@@ -24,12 +26,6 @@ export declare class Gateway {
24
26
  private initServices;
25
27
  /**
26
28
  * 初始化闲置检查器
27
- * 定期检查并停止闲置的服务
28
- *
29
- * 注意:
30
- * - 纯代理模式(proxyOnly)不会被停止
31
- * - 只有当服务没有活动连接且超过闲置时间时才会停止
32
- * - 这样可以避免 SSE/WebSocket 长连接被意外断开
33
29
  */
34
30
  private initIdleChecker;
35
31
  /**
@@ -37,7 +33,7 @@ export declare class Gateway {
37
33
  */
38
34
  private checkIdleService;
39
35
  /**
40
- * 处理端口绑定请求(直接路由,无需 Host 头)
36
+ * 处理端口绑定请求
41
37
  */
42
38
  private handlePortBindingRequest;
43
39
  /**
@@ -52,24 +48,25 @@ export declare class Gateway {
52
48
  * 处理需要等待服务停止完成的场景
53
49
  */
54
50
  private handleServiceWithWait;
51
+ /**
52
+ * 处理服务正在启动中的场景
53
+ * 等待启动 Promise 完成后,如果成功则直接代理,如果失败则返回 503
54
+ */
55
+ private handleServiceWithStartPromise;
55
56
  /**
56
57
  * 处理需要启动服务的场景
57
58
  */
58
59
  private handleServiceStart;
59
60
  /**
60
61
  * 处理直接代理场景(服务已在线)
62
+ * 双向流式转发:请求体边收边发,响应体边收边回
61
63
  */
62
64
  private handleDirectProxy;
63
65
  /**
64
- * 发起代理请求并流式转发响应
66
+ * 发起代理请求并流式转发响应(用于服务启动/等待场景)
65
67
  *
66
- * @param res - uWS HttpResponse 对象
67
- * @param mapping - 路由映射信息(包含缓存的目标 URL)
68
- * @param path - 请求路径(包含查询字符串)
69
- * @param startTime - 请求开始时间(用于日志)
70
- * @param method - HTTP 方法
71
- * @param headers - 请求头
72
- * @param body - 请求体
68
+ * 仅在服务需要启动或等待停止时使用,此时请求体已缓冲为 Buffer。
69
+ * 响应体保持流式转发。
73
70
  */
74
71
  private forwardProxyRequest;
75
72
  /**
@@ -86,7 +83,6 @@ export declare class Gateway {
86
83
  private createPortBindingListener;
87
84
  /**
88
85
  * 清理所有正在运行的服务
89
- * 在网关退出时调用
90
86
  */
91
87
  cleanup(): Promise<void>;
92
88
  }