This commit is contained in:
Aubrey Yang 2024-06-16 07:36:12 +00:00 committed by GitHub
commit 1b010e3a9c
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -5,8 +5,8 @@ import (
"encoding/json" "encoding/json"
"errors" "errors"
"fmt" "fmt"
"net"
"sync" "sync"
"net"
"time" "time"
"github.com/metacubex/mihomo/adapter/outbound" "github.com/metacubex/mihomo/adapter/outbound"
@ -134,33 +134,33 @@ func (lb *LoadBalance) IsL3Protocol(metadata *C.Metadata) bool {
} }
func strategyRoundRobin(url string) strategyFn { func strategyRoundRobin(url string) strategyFn {
var availableProxies []C.Proxy
idx := 0 idx := 0
idxMutex := sync.Mutex{} idxMutex := sync.Mutex{}
return func(proxies []C.Proxy, metadata *C.Metadata, touch bool) C.Proxy { return func(proxies []C.Proxy, metadata *C.Metadata, touch bool) C.Proxy {
idxMutex.Lock() idxMutex.Lock()
defer idxMutex.Unlock() defer idxMutex.Unlock()
i := 0
length := len(proxies)
if touch { if touch {
defer func() { // check list
idx = (idx + i) % length availableProxies = []C.Proxy{}
}() for _, proxy := range proxies {
}
for ; i < length; i++ {
id := (idx + i) % length
proxy := proxies[id]
if proxy.AliveForTestUrl(url) { if proxy.AliveForTestUrl(url) {
i++ availableProxies = append(availableProxies, proxy)
return proxy
} }
} }
// fallback
if len(availableProxies) == 0 {
return proxies[0] return proxies[0]
} }
} }
proxy := availableProxies[idx]
// reset idx
idx = (idx + 1) % len(availableProxies)
return proxy
}
}
func strategyConsistentHashing(url string) strategyFn { func strategyConsistentHashing(url string) strategyFn {
maxRetry := 5 maxRetry := 5