value('random_shuffle') === 1; } /** * 解析本次访问应使用的号码下标(0 .. numberCount-1) * * @param int $linkId 分流链接 ID * @param int $numberCount 可用号码数量 * @param SplitRoundRobinStore $roundRobinStore 关闭随机打乱时的轮转计数器 * @param string $poolKey 选号池标识(preferred / deferred 等) */ public static function resolvePickIndex( int $linkId, int $numberCount, SplitRoundRobinStore $roundRobinStore, string $poolKey = 'main' ): int { if ($numberCount <= 0) { return 0; } if ($numberCount === 1) { return 0; } if (self::isRandomShuffleEnabled($linkId)) { return random_int(0, $numberCount - 1); } return $roundRobinStore->nextIndex($linkId, $numberCount, $poolKey); } /** * 从号码行列表中按链接配置选一条(严格轮转或随机) * * @param array|Number> $rows * @return array|Number|null */ public static function pickRowFromList( int $linkId, array $rows, SplitRoundRobinStore $roundRobinStore, string $poolKey = 'main' ) { $count = count($rows); if ($count === 0) { return null; } $index = self::resolvePickIndex($linkId, $count, $roundRobinStore, $poolKey); return $rows[$index] ?? $rows[0]; } }