コード例 #1
0
 /**
  * 获取一个实例
  * @return instance
  */
 protected function __instance()
 {
     // 获取一个服务端节点地址
     $address = AddressManager::getOneAddress($this->serviceName);
     list($ip, $port) = explode(':', $address);
     // Transport
     $socket = new \Thrift\Transport\TSocket($ip, $port);
     $transport_name = ThriftClient::getTransport($this->serviceName);
     $transport = new $transport_name($socket);
     // Protocol
     $protocol_name = ThriftClient::getProtocol($this->serviceName);
     $protocol = new $protocol_name($transport);
     try {
         $transport->open();
     } catch (\Exception $e) {
         // 无法连上,则踢掉这个地址
         AddressManager::kickAddress($address);
         throw $e;
     }
     // 客户端类名称
     $class_name = "\\Services\\" . $this->serviceName . "\\" . $this->serviceName . "Client";
     // 类不存在则尝试加载
     if (!class_exists($class_name)) {
         $service_dir = $this->includeFile();
         if (!class_exists($class_name)) {
             throw new \Exception("Class {$class_name} not found in directory {$service_dir}");
         }
     }
     // 初始化一个实例
     return new $class_name($protocol);
 }
コード例 #2
0
ファイル: ThriftInstance.php プロジェクト: tonydeng/tcp4p
 /**
  * 获取一个实例
  * @return instance
  */
 protected function __instance()
 {
     // 获取一个服务端节点地址
     $address = AddressManager::getOneAddress($this->serviceName);
     list($ip, $port) = explode(':', $address);
     // Transport
     $socket = new \Thrift\Transport\TSocket($ip, $port);
     //timeout config
     $socket->setSendTimeout($this->sendTimeout);
     $socket->setRecvTimeout($this->recvTimeout);
     $transport_name = ThriftClient::getTransport($this->serviceName);
     $transport = new $transport_name($socket);
     // Protocol
     $protocol_name = ThriftClient::getProtocol($this->serviceName);
     $protocol = new $protocol_name($transport);
     try {
         $transport->open();
     } catch (\Exception $e) {
         // 无法连上,则踢掉这个地址
         AddressManager::kickAddress($address);
         throw $e;
     }
     // 客户端类名称
     $class_name = ThriftClient::getServiceDir($this->serviceName);
     // 类不存在则报出异常
     if (!class_exists($class_name)) {
         throw new \Exception("Class {$class_name} not found in directory {$service_dir}");
     }
     // 初始化一个实例
     return new $class_name($protocol);
 }
コード例 #3
0
        return true;
    }
    /**
     * 释放锁
     * @return bool
     */
    public static function releaseMutex()
    {
        ($fd = self::getSemFd()) && sem_release($fd);
        return true;
    }
}
// ================ 以下是测试代码 ======================
if (PHP_SAPI == 'cli' && isset($argv[0]) && $argv[0] == basename(__FILE__)) {
    AddressManager::config(array('HelloWorld' => array('127.0.0.1:9090', '127.0.0.2:9090', '127.0.0.3:9090'), 'HelloWorldService' => array('127.0.0.4:9090')));
    echo "\n剔除address 127.0.0.1:9090 127.0.0.2:9090,放入故障address列表\n";
    AddressManager::kickAddress('127.0.0.1:9090');
    AddressManager::kickAddress('127.0.0.2:9090');
    echo "\n打印故障address列表\n";
    var_export(AddressManager::getBadAddressList());
    echo "\n获取HelloWorld服务的一个可用address\n";
    var_export(AddressManager::getOneAddress('HelloWorld'));
    echo "\n恢复address 127.0.0.2:9090\n";
    var_export(AddressManager::recoverAddress('127.0.0.2:9090'));
    echo "\n打印故障address列表\n";
    var_export(AddressManager::getBadAddressList());
    echo "\n配置有更改,md5会改变,则故障address列表自动清空\n";
    AddressManager::config(array('HelloWorld' => array('127.0.0.2:9090', '127.0.0.3:9090')));
    echo "\n打印故障address列表\n";
    var_export(AddressManager::getBadAddressList());
}