diff --git a/model/channel_cache.go b/model/channel_cache.go index ddd1ddde3..41ffdacab 100644 --- a/model/channel_cache.go +++ b/model/channel_cache.go @@ -167,9 +167,19 @@ func GetRandomSatisfiedChannel(group string, model string, retry int) (*Channel, // Calculate the total weight of all channels up to endIdx totalWeight := sumWeight * smoothingFactor - // totalWeight 小于等于0时,设置为1,选择第一个渠道 + // totalWeight 小于等于0时,给每个渠道加100的权重,然后进行随机选择 if totalWeight <= 0 { - totalWeight = 1 + if len(targetChannels) > 0 { + totalWeight = len(targetChannels) * 100 + randomWeight := rand.Intn(totalWeight) + for _, channel := range targetChannels { + randomWeight -= 100 + if randomWeight <= 0 { + return channel, nil + } + } + } + return nil, errors.New("no available channels") } // Generate a random value in the range [0, totalWeight) randomWeight := rand.Intn(totalWeight)