技术头条 - 一个快速在微博传播文章的方式     搜索本站
您现在的位置首页 --> 网络系统 --> 处理统一资源文件的cdn地址

处理统一资源文件的cdn地址

浏览:2290次  出处信息
在项目开发中,我们常常会使用到cdn,但是呢,浏览器针对单个域名只能同时发起2个请求,这就造成了空有大量带宽,但是处理时间却还是很长。
为了解决这个问题,常常会对cdn域名建立多个二级域名,来解决浏览器同域名限制2个并发的问题。

这里我使用的ci框架
<?php

if (!defined('BASEPATH'
))
    exit(
'No direct script access allowed'
);

//如果未定义站点cdn二级路径名称,则自行定义之
if (!defined('SITE_CDN_NAME'
)) {
    
define('SITE_CDN_NAME''app'
);
}
//如果未定义站点cdn域名,则自行定义之
if (!defined('SITE_CDN_DOMAIN'
)) {
    
define('SITE_CDN_DOMAIN''.xs8xs8.cn'
);
}

/**
 * 获取CDN相关资源地址
 */
class cdn
{

    public function 
expires($min
) {
        
$expires $min*60
;
        
header("Pragma: public"
);
        
header("Cache-Control: maxage=" $expires
);
        
header("Expires: " gmdate("D, d M Y H:i:s"TIMESTAMP $expires) . " GMT"
);
    }

    
/**
     * 获取资源文件CDN路径
     * 例如:
     *     http://book.xs8.cn/static/js/jquery.js
     *     传递参数时需传递jquery.js
     * @param string $filename
     * @param bool $global 是否获取共用文件
     * @return string
     */
    
public function get_resources($filename$global false
) {
        
$path_parts pathinfo($filename
);
        
$ext strtolower($path_parts['extension'
]);

        if (
in_array($ext, array('js''css'
))) {
            
$method 'get_cdn_' $ext
;
            return 
$this->$method($filename$global
);
        } else if (
in_array($ext, array('jpg''jpeg''gif''png''bmp'
))) {
            return 
$this->get_cdn_img($filename$global
);
        } else if (
in_array($ext, array('swf''flv'
))) {
            return 
$this->get_cdn_flash($filename$global
);
        } else {
            return 
SITE_URL $path
;
        }
    }

    private function 
get_cdn_pre_config($filename$global
) {
        
$site_cdn_name $global == false SITE_CDN_NAME 'www'
;
        
$url_pre sprintf("%u"crc32(md5(strtolower($filename)))) % 1
//若要生成s1和s2则代码改为:%2+1
        
return array('site_cdn_name' => $site_cdn_name'url_pre' => $url_pre
);
    }

    public function 
get_cdn_js($filename$global false
) {
        
$cdn_config $this->get_cdn_pre_config($filename$global
);

        
$url 'http://s' $cdn_config['url_pre'] . SITE_CDN_DOMAIN '/' $cdn_config['site_cdn_name'] . '/js/' $filename
;
        return 
$url
;
    }

    public function 
get_cdn_css($filename$global false
) {
        
$cdn_config $this->get_cdn_pre_config($filename$global
);

        
$url 'http://s' $cdn_config['url_pre'] . SITE_CDN_DOMAIN '/' $cdn_config['site_cdn_name'] . '/css/' $filename
;
        return 
$url
;
    }

    public function 
get_cdn_img($filename$global false
) {
        
$cdn_config $this->get_cdn_pre_config($filename$global
);

        
$url 'http://s' $cdn_config['url_pre'] . SITE_CDN_DOMAIN '/' $cdn_config['site_cdn_name'] . '/images/' $filename
;
        return 
$url
;
    }

    public function 
get_cdn_flash($filename$global false
) {
        
$cdn_config $this->get_cdn_pre_config($filename$global
);

        
$url 'http://s' $cdn_config['url_pre'] . SITE_CDN_DOMAIN '/' $cdn_config['site_cdn_name'] . '/flash/' $filename
;
        return 
$url
;
    }

}

建议继续学习:

  1. 一种常见的并发编程场景的处理    (阅读:22618)
  2. Rolling cURL: PHP并发最佳实践    (阅读:10341)
  3. 查看 Apache并发请求数及其TCP连接状态    (阅读:8481)
  4. 大型高并发高负载网站的系统架构分析    (阅读:7729)
  5. 大并发下的高性能编程 – 改进的(用户态)自旋锁    (阅读:7165)
  6. 并发编程系列之一:锁的意义    (阅读:5905)
  7. 并发框架Disruptor译文    (阅读:5113)
  8. 学习:一个并发的Cache    (阅读:4986)
  9. C++多进程并发框架    (阅读:4764)
  10. 当网站使用CDN后获取客户端真实IP的方法    (阅读:4602)
QQ技术交流群:445447336,欢迎加入!
扫一扫订阅我的微信号:IT技术博客大学习
<< 前一篇:DNS
© 2009 - 2024 by blogread.cn 微博:@IT技术博客大学习

京ICP备15002552号-1