/** * 获取一个实例 * @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); }
/** * 载入thrift生成的客户端文件 * @throws \Exception * @return void */ protected function includeFile() { // 载入该服务下的所有文件 $service_dir = ThriftClient::getServiceDir($this->serviceName); foreach (glob($service_dir . '/*.php') as $php_file) { require_once $php_file; } return $service_dir; }