博客
关于我
使用curl控制下载速度
阅读量:685 次
发布时间:2019-03-17

本文共 1523 字,大约阅读时间需要 5 分钟。

速度控制

在实际项目中,为了确保文件下载速度与服务器资源配置相匹配,我们可以通过CURL函数设置下载速率限制。以下主要分为PHP代码和命令行两种实现方式。

PHP代码实现

function http_request($URI) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $URI);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
// 速度控制
$speed = 100000; // 对应100k byte
curl_setopt($ch, CURLOPT_MAX_RECV_SPEED_LARGE, $speed);
$result = curl_exec($ch);
if (!$result) {
echo curl_error($ch);
return false;
}
curl_close($ch);
return $result;
}
$url = "http://toutiao.sogoucdn.com/ykvideo/20181130/0575139af28f38c336912739acf33a88.mp4";
$res = http_request($url);
file_put_contents("./video", $res);

CURL命令行实现

curl "http://toutiao.sogoucdn.com/ykvideo/20181130/0575139af28f38c336912739acf33a88.mp4" -o video --limit-rate 100k

说明

  • CURL_MAX_RECV_SPEED_LARGE参数:用于限制下载速度,单位为byte。如上例所示,设置为100000表示下载速度不超过100k byte。

  • 注意事项

    • 速度单位为byte,与bit不同档次,需注意转换。
    • 实际应用中,建议根据网络环境调整速率设定。
  • 下载速度测定

    为了验证上述速度控制设置的有效性,我们可以使用iftop工具监控网卡 下载速率。以下分别介绍PHP和命令行方式的实现方法。

    PHP测定方式

    运行上述代码后,在iftop界面可以观察到类似以下统计信息:

    10.144.73.171 => 111.202.99.142    6.56Kb  6.78Kb  6.76Kb    <=     1.02Mb  1.00Mb  0.99Mb

    从中可以看出,平均下载速度在900kb~1.1M bit之间波动,符合预期控制。

    命令行测定方式

    在iftop界面查看如下记录:

    10.144.73.171 => 111.202.99.191    6.72Kb  6.59Kb  6.81Kb    <=     1.04Mb  1.04Mb  1.04Mb

    测定结果表明,下载速度在850kb~1.1M bit之间变化,与PHP实现相差不大。

    结论

  • 实现可行性:CURL工具支持速度控制,无论是在PHP编程还是命令行都能有效实现下载速率限制。

  • 精度考量:控制速度只能确保持均值附近的状态,个别时段可能出现明显波动。

  • 速率设定规律:较低速率会导致速度波动更大,因此建议根据实际需求合理调节。

  • 工具不同带来的影响:由于iftop等工具的不同,测试结果可能存在差异,需确认使用的工具及对应的参数说明。

  • 综上所述,合理设置下载速度控制能够有效管理资源分配,但需综合考虑实际应用环境进行调整。

    转载地址:http://giwhz.baihongyu.com/

    你可能感兴趣的文章
    No module named 'crispy_forms'等使用pycharm开发
    查看>>
    No module named cv2
    查看>>
    No module named tensorboard.main在安装tensorboardX的时候遇到的问题
    查看>>
    No module named ‘MySQLdb‘错误解决No module named ‘MySQLdb‘错误解决
    查看>>
    No new migrations found. Your system is up-to-date.
    查看>>
    No qualifying bean of type XXX found for dependency XXX.
    查看>>
    No qualifying bean of type ‘com.netflix.discovery.AbstractDiscoveryClientOptionalArgs<?>‘ available
    查看>>
    No resource identifier found for attribute 'srcCompat' in package的解决办法
    查看>>
    no session found for current thread
    查看>>
    No toolchains found in the NDK toolchains folder for ABI with prefix: mips64el-linux-android
    查看>>
    NO.23 ZenTaoPHP目录结构
    查看>>
    no1
    查看>>
    NO32 网络层次及OSI7层模型--TCP三次握手四次断开--子网划分
    查看>>
    NOAA(美国海洋和大气管理局)气象数据获取与POI点数据获取
    查看>>
    NoClassDefFoundError: org/springframework/boot/context/properties/ConfigurationBeanFactoryMetadata
    查看>>
    node exporter完整版
    查看>>
    Node JS: < 一> 初识Node JS
    查看>>
    Node Sass does not yet support your current environment: Windows 64-bit with Unsupported runtime(72)
    查看>>
    Node 裁切图片的方法
    查看>>
    Node+Express连接mysql实现增删改查
    查看>>