/** * 获取实例 * @param string $config_name * @throws \Exception */ public static function instance($config_name) { // memcached 驱动 if (\Config\Store::$driver == \Config\Store::DRIVER_MC) { if (!isset(\Config\Store::${$config_name})) { echo "\\Config\\Store::{$config_name} not set\n"; throw new \Exception("\\Config\\Store::{$config_name} not set\n"); } if (!isset(self::$instance[$config_name])) { if (extension_loaded('Memcached')) { self::$instance[$config_name] = new \Memcached(); } elseif (extension_loaded('Memcache')) { self::$instance[$config_name] = new \Memcache(); } else { sleep(2); exit("extension memcached is not installed\n"); } foreach (\Config\Store::${$config_name} as $address) { list($ip, $port) = explode(':', $address); self::$instance[$config_name]->addServer($ip, $port); } } return self::$instance[$config_name]; } elseif (\Config\Store::$driver == \Config\Store::DRIVER_REDIS) { if (!isset(\Config\Store::${$config_name})) { echo "\\Config\\Store::{$config_name} not set\n"; throw new \Exception("\\Config\\Store::{$config_name} not set\n"); } if (!isset(self::$instance[$config_name])) { self::$instance[$config_name] = new \GatewayWorker\Lib\StoreDriver\Redis(); $address = \Config\Store::getGateway(); $timeout = 1; self::$instance[$config_name]->connect($address['host'], $address['port'], $timeout); //self::$instance[$config_name]->setOption(\Redis::OPT_SERIALIZER, \Redis::SERIALIZER_PHP); } return self::$instance[$config_name]; } else { if (!isset(self::$instance[$config_name])) { self::$instance[$config_name] = new \GatewayWorker\Lib\StoreDriver\File($config_name); } return self::$instance[$config_name]; } }