dialOne 拨号一个连接并加入空闲池。
()
| 69 | |
| 70 | // dialOne 拨号一个连接并加入空闲池。 |
| 71 | func (p *prewarmPool) dialOne() { |
| 72 | conn, err := DialFast(p.addr) |
| 73 | if err != nil { |
| 74 | utils.Logger.Warn("预热连接失败", zap.String("target", p.addr), zap.Error(err)) |
| 75 | time.Sleep(500 * time.Millisecond) |
| 76 | p.mu.Lock() |
| 77 | p.warming-- |
| 78 | if p.warming < 0 { |
| 79 | p.warming = 0 |
| 80 | } |
| 81 | p.ensureLocked() |
| 82 | p.mu.Unlock() |
| 83 | return |
| 84 | } |
| 85 | if tc, ok := conn.(*net.TCPConn); ok { |
| 86 | _ = tc.SetKeepAlive(true) |
| 87 | _ = tc.SetKeepAlivePeriod(30 * time.Second) |
| 88 | _ = tc.SetNoDelay(true) |
| 89 | } |
| 90 | p.mu.Lock() |
| 91 | p.warming-- |
| 92 | p.idle = append(p.idle, conn) |
| 93 | p.ensureLocked() |
| 94 | p.mu.Unlock() |
| 95 | } |
| 96 | |
| 97 | // acquirePrewarmed 优先从预热池取出可用连接。 |
| 98 | func acquirePrewarmed(addr string) (net.Conn, bool) { |
no test coverage detected