getRandHostData() публичный статический Метод

获取一个随机Host数组
public static getRandHostData ( $group ) : array | boolean
$group
Результат array | boolean
Пример #1
0
 /**
  * 获取对象
  *
  * @param $serverId
  * @param $workerId
  * @return Client|false
  */
 public static function getClient($serverGroup, $serverId, $workerId, $isTask = false)
 {
     if (!$serverGroup) {
         # 服务器分组
         $serverGroup = Server::$config['clusters']['group'] ?: 'default';
     }
     if ($isTask) {
         $serverGroup .= '.task';
     }
     if (-1 === $serverId) {
         # 随机服务器ID
         $host = Host::getRandHostData($serverGroup);
         if ($host) {
             $serverId = $host['id'];
         }
     } else {
         # 随机ID
         $host = Host::$table->get("{$serverGroup}_{$serverId}");
     }
     if (!$host) {
         return false;
     }
     if (-1 === $workerId) {
         $workerId = mt_rand(0, $host['worker_num'] - 1);
     }
     # 生成一个KEY
     $key = "{$serverGroup}_{$serverId}_{$workerId}";
     if (!isset(self::$instances[$key])) {
         if (!isset($host)) {
             $host = Host::$table->get($serverId);
             if (!$host) {
                 return false;
             }
         }
         # 检查任务ID是否超出序号返回
         if ($workerId - $host['worker_num'] > 1) {
             return false;
         }
         /**
          * @var Client $client
          */
         $class = static::class;
         $client = new $class();
         $client->serverId = $serverId;
         $client->workerId = $workerId;
         $client->key = $host['key'];
         $client->ip = $host['ip'];
         $client->port = $host['port'];
         $rs = $client->connect();
         if (!$rs) {
             # 没有连接上去
             return false;
         }
         self::$instances[$key] = $client;
     }
     return self::$instances[$key];
 }