diff --git a/model/cache.go b/model/cache.go index b1199e2b..dc856393 100644 --- a/model/cache.go +++ b/model/cache.go @@ -291,10 +291,13 @@ func CacheGetRandomSatisfiedChannel(group string, model string) (*Channel, error } } } + // 平滑系数 + smoothingFactor := 10 + // Calculate the total weight of all channels up to endIdx totalWeight := 0 for _, channel := range channels[:endIdx] { - totalWeight += channel.GetWeight() + totalWeight += channel.GetWeight() + smoothingFactor } if totalWeight == 0 { @@ -307,8 +310,8 @@ func CacheGetRandomSatisfiedChannel(group string, model string) (*Channel, error // Find a channel based on its weight for _, channel := range channels[:endIdx] { - randomWeight -= channel.GetWeight() - if randomWeight <= 0 { + randomWeight -= channel.GetWeight() + smoothingFactor + if randomWeight < 0 { return channel, nil } }