突破aria2原版16线程限制(详细教程附Windows成品)

查看 63|回复 9
作者:~零度   
一、aria2的介绍(AI生成)

aria2 是一个开源的、轻量级的命令行下载工具,支持多种协议,包括 HTTP/HTTPS、FTP、SFTP、BitTorrent 和 Metalink。以下是关于 aria2 的一些主要特点:
[ol]

  • 多协议支持:aria2 能够从多种协议下载文件,这意味着你可以使用一个工具来处理不同的下载任务。

  • 多源下载:aria2 支持从多个源和位置下载同一个文件的不同部分,这可以显著提高下载速度。

  • 断点续传:即使在下载过程中出现中断,aria2 也可以从上次中断的地方继续下载,无需从头开始。

  • 选择性下载:在使用 BitTorrent 协议下载时,aria2 允许用户选择性地下载文件中的特定部分。

  • 命令行界面:aria2 是一个命令行工具,适合高级用户和自动化脚本。

  • 轻量级:aria2 的设计注重效率,因此它占用系统资源较少。

  • 多线程和分段下载:aria2 可以通过多线程和将文件分割成多个部分同时下载来提高下载速度。

  • JSON-RPC 和 XML-RPC 接口:aria2 提供了远程控制接口,允许第三方应用程序(如网页界面或移动应用)控制下载。

  • 跨平台:aria2 可以在多种操作系统上运行,包括 Windows、macOS 和 Linux。

  • 支持 IPv4 和 IPv6:aria2 同时支持 IPv4 和 IPv6,适应未来的网络标准。
    [/ol]
    由于 aria2 的灵活性和强大的功能,它被许多用户和开发者作为首选的下载工具,特别是在需要自动化下载任务或提高下载效率的场景中。

    二、原版aria2的限制
    如下图所示,原版的aria2无法设置超过16的单服务器最大连接数。对于一些下载非常慢的链接,而电脑性能又比较充足的情况下,体验较差。

    下面是某一个链接用16线程下载的速度和1000线程下载的速度,分别是234 KB/s和7.7MB/s,差距还是比较明显的。


    三、修改原版aria2的源代码
    原版aria2的github地址:https://github.com/aria2/aria2
    需要修改的文件

  • aria2/src/OptionHandlerFactory.cc
  • 441行附近

    原版:
       OptionHandler* op(new NumberOptionHandler(PREF_MAX_CONNECTION_PER_SERVER,
                                                  TEXT_MAX_CONNECTION_PER_SERVER,
                                                  "1", 1, 16, 'x'));
        op->addTag(TAG_BASIC);
        op->addTag(TAG_FTP);
        op->addTag(TAG_HTTP);
        op->setInitialOption(true);
        op->setChangeGlobalOption(true);
        op->setChangeOptionForReserved(true);
        handlers.push_back(op);
      }
    修改后
    OptionHandler* op(new NumberOptionHandler(PREF_MAX_CONNECTION_PER_SERVER,
                                                  TEXT_MAX_CONNECTION_PER_SERVER,
                                                  "32", 1, -1, 'x'));
        op->addTag(TAG_BASIC);
        op->addTag(TAG_FTP);
        op->addTag(TAG_HTTP);
        op->setInitialOption(true);
        op->setChangeGlobalOption(true);
        op->setChangeOptionForReserved(true);
        handlers.push_back(op);
      }
    说明:此处是修改单服务器最大连接数,原版默认最大连接数1,可以设置的范围是1到16,这里改成了默认32,16改成了-1表示不限制最大值。
  • 502行附近

    原版:
       OptionHandler* op(new UnitNumberOptionHandler(
            PREF_MIN_SPLIT_SIZE, TEXT_MIN_SPLIT_SIZE, "20M", 1_m, 1_g, 'k'));
        op->addTag(TAG_BASIC);
        op->addTag(TAG_FTP);
        op->addTag(TAG_HTTP);
        op->setInitialOption(true);
        op->setChangeGlobalOption(true);
        op->setChangeOptionForReserved(true);
        handlers.push_back(op);
      }
    修改后:
       OptionHandler* op(new UnitNumberOptionHandler(
            PREF_MIN_SPLIT_SIZE, TEXT_MIN_SPLIT_SIZE, "1M", 1_k, 1_g, 'k'));
        op->addTag(TAG_BASIC);
        op->addTag(TAG_FTP);
        op->addTag(TAG_HTTP);
        op->setInitialOption(true);
        op->setChangeGlobalOption(true);
        op->setChangeOptionForReserved(true);
        handlers.push_back(op);
      }
    说明:此处修改的是最小文件分片大小,默认值由原版的20M修改为1M,最小值由1M修改为1K
  • 972行附近:

    原版:
       OptionHandler* op(
            new NumberOptionHandler(PREF_SPLIT, TEXT_SPLIT, "5", 1, -1, 's'));
        op->addTag(TAG_BASIC);
        op->addTag(TAG_FTP);
        op->addTag(TAG_HTTP);
        op->setInitialOption(true);
        op->setChangeGlobalOption(true);
        op->setChangeOptionForReserved(true);
        handlers.push_back(op);
      }
    修改后:
       OptionHandler* op(
            new NumberOptionHandler(PREF_SPLIT, TEXT_SPLIT, "32", 1, -1, 's'));
        op->addTag(TAG_BASIC);
        op->addTag(TAG_FTP);
        op->addTag(TAG_HTTP);
        op->setInitialOption(true);
        op->setChangeGlobalOption(true);
        op->setChangeOptionForReserved(true);
        handlers.push_back(op);
      }
    说明:此处修改的是默认的分割文件多线程下载的线程数量,它受到上面两个参数的影响,即线程数不能超过单服务器最大连接数,分割后最小的文件块不能小于最小文件分片大小。

    四、编译
    Linux系统下较为简单,无需赘述,因此只介绍windows下编译的方法
    根据官方的说明文档,文本采用最简单的docker容器交叉编译方法,编译完之后直接删除docker容器和镜像即可,不需要安装额外的编译环境。
    1. 安装docker
    以下两种方式任选一种合适的即可,有wsl的建议用方式二

  • 方式一:下载并安装docker desktop:https://www.docker.com/products/docker-desktop/

  • 下载windows AMD64版本的

  • 切换国内镜像源


    将docker engine处的json文本修改为:
    {
      "builder": {
        "gc": {
          "defaultKeepStorage": "20GB",
          "enabled": true
        }
      },
      "experimental": false,
      "registry-mirrors": [
        "https://docker.linkedbus.com",
        "https://docker.xuanyuan.me"
      ]
    }
    也可以换成你喜欢的镜像源
  • 终端启用docker命令


  • 方式二

  • 进入wsl子系统(以ubuntu系统为例,其他的类似)

  • 安装docker

    # 安装必要的依赖
    sudo apt update
    sudo apt install apt-transport-https ca-certificates curl software-properties-common gnupg lsb-release
    # 添加docker的软件源
    curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
    echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
    sudo apt update
    # 安装docker
    sudo apt install docker-ce docker-ce-cli containerd.io
    # 将当前用户添加到docker用户组
    sudo usermod -aG docker $USER
    # 切换国内源,复制到下面那个EOF的位置粘贴到终端里面
    sudo tee /etc/docker/daemon.json

    2. 安装aria2编译环境docker镜像
    到这一步,windows或者wsl子系统,操作都是一样的

  • 下载aria2的dockerfile:https://raw.githubusercontent.com/aria2/aria2/refs/heads/master/Dockerfile.mingw

  • 安装docker镜像(windows打开命令终端,wsl则进入子系统)
    # 注意将Dockerfile.mingw替换为实际的文件路径
    docker build -t aria2-mingw -f ./Dockerfile.mingw ./

    3. 编译aria2

  • 运行docker容器
    mkdir aria2_custom
    # 进入docker容器,并将主机的./aria2_custom目录映射到docker容器内的/aria2_custom目录,然后运行docker容器的bash终端
    docker run -it --name aria2-build -v ./aria2_custom:/aria2_custom aria2-mingw /bin/bash

  • 复制aria2到共享目录,然后修改源代码
    容器内运行:
    cp -r /aria2/* /aria2_custom/
    参考第三节,使用你喜欢的方式修改 ./aria2_custom/src/OptionHandlerFactory.cc
    因为容器内的/aria2_custom目录和主机的./aria2_custom是共享的,因此直接在容器外部修改代码文件即可,可以使用vim命令或者记事本等工具

  • 编译aria2
    容器内运行:
    cd /aria2_custom
    autoreconf -i
    ./mingw-config
    # 4线程编译
    make -j4
    i686-w64-mingw32-strip src/aria2c.exe

  • 拷贝编译好的aria2c.exe
    在容器外部将./aria2_custom/src/aria2c.exe,拷贝出来,放到你需要的位置即可
    可以直接覆盖替换原有的aria2c.exe,结合aria2 gui软件使用

    成品蓝奏云下载地址:https://wwwb.lanzn.com/i0Nzl2ggrije  密码:c1f4

    原版, 线程

  • TigerPoorGuy   

    下来试试,谢谢分享
    n0rma1playe2   

    感谢楼主分享
    xp360   

    谢谢分享
    ofeng626   

    感谢楼主分享
    andytang866   

    闪退  怎么破
    andytang866   


    andytang866 发表于 2024-11-27 19:37
    闪退  怎么破

    要先安装原版吗,我是下载后直接打开闪退
    ganbey   

    支持,晚点试试看
    hijk1   

    伸手党在此感谢 下来试试
    lotus136   


    andytang866 发表于 2024-11-27 19:37
    要先安装原版吗,我是下载后直接打开闪退

    同求闪退解决办法!
    您需要登录后才可以回帖 登录 | 立即注册

    返回顶部