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

本文共 1506 字,大约阅读时间需要 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/

    你可能感兴趣的文章
    python selenium自动化测试报告
    查看>>
    Python selenium自动化测试框架实战 —— 登录测试案例
    查看>>
    Python Selenium设计模式 —— POM
    查看>>
    Python Serial:如何使用 read 或 readline 函数一次读取多个字符
    查看>>
    Python set([]) 如何检查两个对象是否相等?一个对象需要定义哪些方法来自定义它?
    查看>>
    Python setup.py:数据文件无法复制目录:不存在或不是常规文件
    查看>>
    Python setuptools sdist:仅安装版本化文件
    查看>>
    Python Shell下使用matplotlib
    查看>>
    Python Slice How-to,我知道Python Slice,但我怎么才能使用内置的Slice对象呢?
    查看>>
    python socket分包发送数据
    查看>>
    python socket模块_Python socket模块实现TCP服务端客户端
    查看>>
    Python SOCKS5代理客户端HTTPS
    查看>>
    Python Soc网络分析:通过使用函数迭代列表来计算机会网络
    查看>>
    Python Sphinx自动摘要:成员函数的自动列表
    查看>>
    Python SQL和NoSQL数据库操作实战
    查看>>
    python stdout flush_sys.stdout.flush()方法的用法
    查看>>
    python string 运算
    查看>>
    Python str与bytes之间的转换
    查看>>
    Python subprocess ffmpeg
    查看>>
    python subprocess Permission denied Errno 13
    查看>>