123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198 |
- <?php
- define('LOCATION_SERVICE_PRODUCT_NAME', 'Location');
- define('LOCATION_SERVICE_DOMAIN', 'location.aliyuncs.com');
- define('LOCATION_SERVICE_VERSION', '2015-06-12');
- define('LOCATION_SERVICE_DESCRIBE_ENDPOINT_ACTION', 'DescribeEndpoints');
- define('LOCATION_SERVICE_REGION', 'cn-hangzhou');
- define('CACHE_EXPIRE_TIME', 3600);
- class DescribeEndpointRequest extends RpcAcsRequest
- {
-
- public function __construct($id, $serviceCode, $endPointType)
- {
- parent::__construct(LOCATION_SERVICE_PRODUCT_NAME,
- LOCATION_SERVICE_VERSION,
- LOCATION_SERVICE_DESCRIBE_ENDPOINT_ACTION);
- $this->queryParameters['Id'] = $id;
- $this->queryParameters['ServiceCode'] = $serviceCode;
- $this->queryParameters['Type'] = $endPointType;
- $this->setRegionId(LOCATION_SERVICE_REGION);
- $this->setAcceptFormat('JSON');
- }
- }
- class LocationService
- {
-
- private $clientProfile;
-
- public static $cache = array();
-
- public static $lastClearTimePerProduct = array();
-
- public static $serviceDomain = LOCATION_SERVICE_DOMAIN;
-
- public function __construct($clientProfile)
- {
- $this->clientProfile = $clientProfile;
- }
-
- public function findProductDomain($regionId, $serviceCode, $endPointType, $product)
- {
- $key = $regionId . '#' . $product;
- $domain = isset(self::$cache[$key]) ? self::$cache[$key] : null;
- if ($domain === null || $this->checkCacheIsExpire($key) == true) {
- $domain = $this->findProductDomainFromLocationService($regionId, $serviceCode, $endPointType);
- self::$cache[$key] = $domain;
- }
- return $domain;
- }
-
- public static function addEndPoint($regionId, $product, $domain)
- {
- $key = $regionId . '#' . $product;
- self::$cache[$key] = $domain;
- $lastClearTime = mktime(0, 0, 0, 1, 1, 2999);
- self::$lastClearTimePerProduct[$key] = $lastClearTime;
- }
-
- public static function modifyServiceDomain($domain)
- {
- self::$serviceDomain = $domain;
- }
-
- private function checkCacheIsExpire($key)
- {
- $lastClearTime = isset(self::$lastClearTimePerProduct[$key])
- ? self::$lastClearTimePerProduct[$key]
- : null;
- if ($lastClearTime === null) {
- $lastClearTime = time();
- self::$lastClearTimePerProduct[$key] = $lastClearTime;
- }
- $now = time();
- $elapsedTime = $now - $lastClearTime;
- if ($elapsedTime > CACHE_EXPIRE_TIME) {
- $lastClearTime = time();
- self::$lastClearTimePerProduct[$key] = $lastClearTime;
- return true;
- }
- return false;
- }
-
- private function findProductDomainFromLocationService($regionId, $serviceCode, $endPointType)
- {
- $request = new DescribeEndpointRequest($regionId, $serviceCode, $endPointType);
- $signer = $this->clientProfile->getSigner();
- $credential = $this->clientProfile->getCredential();
- $requestUrl = $request->composeUrl($signer, $credential, self::$serviceDomain);
- $httpResponse = HttpHelper::curl($requestUrl, $request->getMethod(), null, $request->getHeaders());
- if (!$httpResponse->isSuccess()) {
- return null;
- }
- $respObj = json_decode($httpResponse->getBody());
- return $respObj->Endpoints->Endpoint[0]->Endpoint;
- }
- }
|