caidaohz commited on
Commit
52d2d26
·
1 Parent(s): d213bd6

✨ 更新模块名称并增强README.md文档

Browse files

- 将模块名称从deno-proxy更改为api-proxy
- 在README.md中新增多线程支持的详细说明,包括Go语言原生并发支持、读写锁保护共享数据、每个请求独立goroutine的实现等
- 更新并发安全机制部分,详细介绍原子操作和读写锁的使用,提升文档的可读性和实用性

Files changed (2) hide show
  1. README.md +130 -2
  2. go.mod +1 -1
README.md CHANGED
@@ -23,6 +23,88 @@ app_port: 8000
23
  - **异步架构**:真正异步响应转发,毫秒级响应体验
24
  - **流式传输**:支持实时流式数据传输,边收边发
25
  - **高并发**:基于goroutine池化,支持无限并发
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
26
 
27
  ## 🚀 异步架构核心特性
28
 
@@ -210,6 +292,50 @@ curl "http://localhost:8000/proxy/https://example.com"
210
  3. **智能缓冲策略**:平衡性能与实时性
211
  4. **上下文生命周期管理**:优雅处理超时和取消
212
  5. **零拷贝数据传输**:最小化内存分配
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
213
 
214
  ## 快速开始
215
 
@@ -273,9 +399,11 @@ curl "http://localhost:8000/proxy/https://example.com"
273
  ✅ **支持无限并发** - goroutine池化
274
  ✅ **智能错误处理** - 超时和取消机制
275
  ✅ **HTML实时重写** - 保持代理功能
 
 
276
 
277
- 这使得代理服务器能够**真正实时**地转发服务端响应,为用户提供**毫秒级**的响应体验!
278
 
279
  ---
280
 
281
- > 本项目已完全迁移为 Go 版本,提供更高性能和更好的并发处理能力,并采用异步架构实现真正的实时响应转发。
 
23
  - **异步架构**:真正异步响应转发,毫秒级响应体验
24
  - **流式传输**:支持实时流式数据传输,边收边发
25
  - **高并发**:基于goroutine池化,支持无限并发
26
+ - **多线程支持**:完全支持多线程并发处理,每个请求独立goroutine
27
+
28
+ ## 🔄 多线程并发架构
29
+
30
+ ### 1. Go语言原生并发支持
31
+ ```go
32
+ // 使用 sync/atomic 进行原子操作
33
+ import "sync/atomic"
34
+
35
+ // 原子计数器,无锁更新
36
+ atomic.AddInt64(&requestCount, 1)
37
+ atomic.AddInt64(&errorCount, 1)
38
+
39
+ // 原子布尔值,确保响应头只发送一次
40
+ headersSent atomic.Bool
41
+ ```
42
+
43
+ ### 2. 读写锁保护共享数据
44
+ ```go
45
+ // 统计系统使用读写锁
46
+ type Stats struct {
47
+ mu sync.RWMutex // 读写锁
48
+ Total int64
49
+ Endpoints map[string]*EndpointStats
50
+ }
51
+
52
+ // 性能指标使用读写锁
53
+ type PerformanceMetrics struct {
54
+ mu sync.RWMutex
55
+ RequestsPerSec float64
56
+ AvgResponseTime int64
57
+ ErrorRate float64
58
+ }
59
+ ```
60
+
61
+ ### 3. 每个请求独立goroutine
62
+ ```go
63
+ // Gin框架自动为每个HTTP请求创建goroutine
64
+ r := gin.New() // 每个请求都在独立的goroutine中处理
65
+
66
+ // 异步请求处理
67
+ go func() {
68
+ defer asyncCtx.cancel()
69
+ if err := apc_handleAsyncAPIRequest(asyncCtx, c, prefix, rest, corsHeaders); err != nil {
70
+ log.Printf("Async API request error: %v", err)
71
+ atomic.AddInt64(&errorCount, 1)
72
+ }
73
+ }()
74
+ ```
75
+
76
+ ### 4. 后台协程管理
77
+ ```go
78
+ // 统计更新协程 - 每3秒更新一次
79
+ go func() {
80
+ ticker := time.NewTicker(3 * time.Second)
81
+ defer ticker.Stop()
82
+ for range ticker.C {
83
+ stats.updateSummaryStats()
84
+ }
85
+ }()
86
+
87
+ // 性能指标更新协程 - 每5秒更新一次
88
+ go func() {
89
+ ticker := time.NewTicker(5 * time.Second)
90
+ defer ticker.Stop()
91
+ for range ticker.C {
92
+ updatePerformanceMetrics()
93
+ }
94
+ }()
95
+ ```
96
+
97
+ ### 5. 连接池并发优化
98
+ ```go
99
+ httpClient = &http.Client{
100
+ Timeout: 30 * time.Second,
101
+ Transport: &http.Transport{
102
+ MaxIdleConns: 100, // 最大空闲连接数
103
+ MaxIdleConnsPerHost: 100, // 每个主机的最大空闲连接数
104
+ IdleConnTimeout: 90 * time.Second,
105
+ },
106
+ }
107
+ ```
108
 
109
  ## 🚀 异步架构核心特性
110
 
 
292
  3. **智能缓冲策略**:平衡性能与实时性
293
  4. **上下文生命周期管理**:优雅处理超时和取消
294
  5. **零拷贝数据传输**:最小化内存分配
295
+ 6. **多线程并发支持**:完全支持多线程,每个请求独立goroutine
296
+ 7. **原子操作优化**:使用atomic包避免锁竞争
297
+ 8. **读写锁分离**:读多写少场景的性能优化
298
+
299
+ ## 🔄 并发安全机制
300
+
301
+ ### 1. 原子操作
302
+ ```go
303
+ // 无锁计数器更新
304
+ atomic.AddInt64(&requestCount, 1)
305
+ atomic.AddInt64(&errorCount, 1)
306
+
307
+ // 原子布尔值确保状态一致性
308
+ if apc.headersSent.CompareAndSwap(false, true) {
309
+ // 只执行一次的代码
310
+ }
311
+ ```
312
+
313
+ ### 2. 读写锁分离
314
+ ```go
315
+ // 读操作使用读锁(可并发)
316
+ s.timeWindow.mu.RLock()
317
+ for _, req := range s.timeWindow.requests {
318
+ // 读取操作
319
+ }
320
+ s.timeWindow.mu.RUnlock()
321
+
322
+ // 写操作使用写锁(互斥)
323
+ s.mu.Lock()
324
+ defer s.mu.Unlock()
325
+ // 写入操作
326
+ ```
327
+
328
+ ### 3. 上下文管理
329
+ ```go
330
+ // 支持超时和取消
331
+ ctx, cancel := context.WithTimeout(c.Request.Context(), 60*time.Second)
332
+ defer cancel()
333
+
334
+ // 优雅关闭
335
+ quit := make(chan os.Signal, 1)
336
+ signal.Notify(quit, os.Interrupt, syscall.SIGTERM)
337
+ <-quit
338
+ ```
339
 
340
  ## 快速开始
341
 
 
399
  ✅ **支持无限并发** - goroutine池化
400
  ✅ **智能错误处理** - 超时和取消机制
401
  ✅ **HTML实时重写** - 保持代理功能
402
+ ✅ **多线程支持** - 完全支持多线程并发处理
403
+ ✅ **并发安全** - 原子操作和读写锁保护
404
 
405
+ 这使得代理服务器能够**真正实时**地转发服务端响应,为用户提供**毫秒级**的响应体验,同时充分利用多核CPU的并发处理能力!
406
 
407
  ---
408
 
409
+ > 本项目已完全迁移为 Go 版本,提供更高性能和更好的并发处理能力,并采用异步架构实现真正的实时响应转发。支持多线程并发,每个请求都在独立的goroutine中处理,确保高并发场景下的稳定性和性能。
go.mod CHANGED
@@ -1,4 +1,4 @@
1
- module deno-proxy
2
 
3
  go 1.23.0
4
 
 
1
+ module api-proxy
2
 
3
  go 1.23.0
4